C# 如何将fluent api与具有三个键的多对多表一起使用?
我有这些桌子: TableAIdA-- 表B-- TableCIdC-- 表ABCIDFKA、IdFkB、IdFkC 此外,我还有4个POCO对象: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实体,
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);
}
}