Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将fluent api与具有三个键的多对多表一起使用?_C#_Entity Framework 6_Ef Fluent Api - Fatal编程技术网

C# 如何将fluent api与具有三个键的多对多表一起使用?

C# 如何将fluent api与具有三个键的多对多表一起使用?,c#,entity-framework-6,ef-fluent-api,C#,Entity Framework 6,Ef Fluent Api,我有这些桌子: TableAIdA-- 表B-- TableCIdC-- 表ABCIDFKA、IdFkB、IdFkC 此外,我还有4个POCO对象: TableA { IDTableA; } TableB { IDTableB; } TableC { IDTableC; } TableABC { IDTableA; IDTableB; IDTableC; } 注意:我知道我没有显示导航属性,但这只是说我也有realtion表的POCO实体,

我有这些桌子:

TableAIdA-- 表B-- TableCIdC-- 表ABCIDFKA、IdFkB、IdFkC 此外,我还有4个POCO对象:

TableA
{
    IDTableA;
}

TableB
{
    IDTableB;
}

TableC
{
    IDTableC;
}

TableABC
{
    IDTableA;
    IDTableB;
    IDTableC;
}
注意:我知道我没有显示导航属性,但这只是说我也有realtion表的POCO实体,这与我只有两个表的多对多关系不同

表ABC有三列IdFkA、IdFkB、IdFkC作为键。我想知道如何用EF6和fluent API映射这一点

我是这样想的:

modelBuilder.Entity<TableABC>()
    .HasRequired<TableA>(s => s.TableA)
    .WithMany(s => s.TableABC)
    .HasForeignKey(s => s.IdFkA);

    .HasRequired<TableB>(s => s.TableB)
    .WithMany(s => s.TableABC)
    .HasForeignKey(s => s.IdFkB);

    .HasRequired<TableC>(s => s.TableC)
    .WithMany(s => s.TableABC)
    .HasForeignKey(s => s.IdFkC);
我是如何得到关系表的,实际上是表之间的一对多关系,不是真正的多对多关系,但我不确定这是否正确

因此,在sumary中,我想知道如何使用fluent API设置三个表之间的关系

我想知道如何设置三者之间的关系 使用fluentapi的表

我发现有点不清楚是否需要表之间的多对多关系。但是正如你提到的,在表之间是一对多的关系,我假设你想要一对多的关系

事实上,你有3张桌子并没有使它有太大的不同。你只需要做同样的事情三次。假设您的模型如下所示,但具有公共属性:

TableA
{
    int IDTableA { get; set; }
    ICollection<TableABC> Relations { get; set; } // Bad name but proves point.
}

TableB
{
    int IDTableB { get; set; }
    ICollection<TableABC> Relations { get; set; }
}

TableC
{
    int IDTableC { get; set; }
    ICollection<TableABC> Relations { get; set; }
}

TableABC
{
    int IDTableA { get; set; }
    TableA A { get; set; }
    int IDTableB { get; set; }
    TableA B { get; set; }
    int? IDTableC { get; set; } // Optional
    TableA C { get; set; }
}

请注意,所有映射都基于表ABC。你也可以用另一种方式来做,但我个人更喜欢这种方式。

你建议的代码有什么问题?
public class TableABCMap : EntityTypeConfiguration<TableABC>
{
    public TableABCMap()
    {
        this.HasRequired(e => e.TableA)
            .WithMany(x => x.Relations)
            .HasForeignKey(x => x.IDTableA);

        this.HasRequired(e => e.TableB)
            .WithMany(x => x.Relations)
            .HasForeignKey(x => x.IDTableB);

        this.HasOptional(e => e.TableC)
            .WithMany(x => x.Relations)
            .HasForeignKey(x => x.IDTableC);
    }
}