在Entity Framework 6中使用代码优先。
我有这个实体:
public class LineSection
{
public int Id { get; set; }
public List<LineSection> Next { get; set; }
public List<LineSection> Previous { get; set; }
}
我添加一个迁移,只是为了查看数据库的状态:
CreateTable(
"dbo.LineSectionLineSections",
c => new
{
LineSection_Id = c.Int(nullable: false),
LineSection_Id1 = c.Int(nullable: false),
})
.PrimaryKey(t => new { t.LineSection_Id, t.LineSection_Id1 })
.ForeignKey("dbo.LineSections", t => t.LineSection_Id)
.ForeignKey("dbo.LineSections", t => t.LineSection_Id1)
.Index(t => t.LineSection_Id)
.Index(t => t.LineSection_Id1);
我不喜欢默认命名。我可以更改表名(LineSectionLineSections)和两个外键(LineSection_Id和LineSection_Id1)。使用modelbuilder,数据属性还是其他方式?
答案 0 :(得分:2)
使用Map
流利的API对具有隐式联接表的多对多关系进行配置(无论t是否是自身)。您可以使用ToTable
指定表名,并使用MapLeftKey
/ MapRightKey
指定对应的列名(左为正在配置的实体,右为关系的另一端)。 / p>
因此,在您的情况下,将是这样的:
modelBuilder.Entity<LineSection>()
.HasMany(e => e.Next)
.WithMany(e => e.Previous)
.Map(m => m.MapLeftKey("PrevId")
.MapRightKey("NextId")
.ToTable("LineSectionLinks")
);