自引用多对多递归关系代码的第一个实体框架

Kor*_*yem 42 c# many-to-many entity-framework code-first

我似乎无法完成这项工作

class Member
{
    public virtual IList<Member> Friends { get; set; }
    [Key]
    public int MemberId { get; set; }
    public string Name{ get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我尝试添加Mappings但是徒劳无功.有没有办法用CTP5这样做?

Mor*_*avi 61

按照惯例,Code First将单向关联作为一对多关联.因此,您需要使用流畅的API让Code First知道您希望拥有多对多的自引用关联:

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<Member>().HasMany(m => m.Friends).WithMany();
}
Run Code Online (Sandbox Code Playgroud)

注意:CTP5中存在一个已知错误,该错误不允许您在此方案中自定义连接表列名称.

  • Morteza,我一直在这里和你的博客上关注你.这完美无瑕!虽然结果表名为[MemberMembers],但这很奇怪,但将在RTM中修复.谢了哥们! (2认同)
  • 我如何在最新的 EF core 中执行此操作 (2认同)

Nil*_*ils 19

如果我是正确的,您可以使用以下代码影响多对多的表名:

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<Member>().HasMany(m => m.Friends).WithMany().Map(m =>
        {
            m.MapLeftKey("MemberId");
            m.MapRightKey("FriendId");
            m.ToTable("MembersFriends");
        }
    );
}
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助.