我有这些表格:
另外,我有4个POCO对象:
TableA
{
IDTableA;
}
TableB
{
IDTableB;
}
TableC
{
IDTableC;
}
TableABC
{
IDTableA;
IDTableB;
IDTableC;
}
注意:我知道我没有显示导航属性,但它只是说我也有实现表的POCO实体,这不像我只有两个表的多对多关系
TableABC具有三列IdFkA,IdFkB,IdFkC作为关键字。我想知道如何使用EF6和流畅的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中,我想知道如何使用流畅的API设置三个表之间的关系。
答案 0 :(得分:1)
我想知道如何设置三者之间的关系 具有流畅API的表格
我觉得你是否想要表之间的多对多关系有点不清楚。但正如你提到的那样“它确实是表格之间的一对多关系”我假设你想要它一对多。
你有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; }
}
我更喜欢使用{{3}},这使您可以使用this
。但是否则您可以使用modelBuilder.Entity<TableABC>()
代替。然后你可以这样做:
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);
}
}
请注意,所有映射都基于TableABC
。你也可以反过来做,但我个人更喜欢这种方式。