如何配置多对多实体框架关系,但要到同一个对象?EF6.

本文关键字:EF6 一个对象 关系 框架 何配置 配置 实体 | 更新日期: 2023-09-27 18:31:47

>我有一个类,像这样

public MyObject {
    public long Id { get; set; }
    public string Name {get; set; }
}

我想在此类和另一个相同类型的对象之间设置链接。 所以我需要另一个对象来处理多对多关系,这很好,像这样

public MyRelationship {
    public long Id { get; set; }
    public string Name { get; set; }
}

但是我如何配置其余的。 我在网上尝试过示例,但它们是太不同的对象。

我尝试将导航属性添加到链接的MyRelations中,如下所示

public MyRelationship {
    public long Id { get; set; }
    public string Name { get; set; }
    public MyObject Parent { get; set; }
    public MyObject Child { get; set; }
}

还有 2 个集合到 MyObject,就像这样

public MyObject {
    public long Id { get; set; }
    public string Name {get; set; }
    public virtual ICollection<MyRelationship> ParentRelationships { get; set; }
    public virtual ICollection<MyRelationship> ChildRelationships { get; set; }
}

然后在我的配置文件中添加了

// relationships
this.HasMany(e => e.ParentRelationships)
    .WithRequired(e => e.Parent)
    .HasForeignKey(e => e.ParentId)
    .WillCascadeOnDelete(false);
this.HasMany(e => e.ChildRelationships)
    .WithRequired(e => e.Child)
    .HasForeignKey(e => e.ChildId)
    .WillCascadeOnDelete(false);

但是我收到错误,像这样

在类型"MyObject"上声明的导航属性"子关系"已配置了冲突的外键。

如何配置多对多实体框架关系,但要到同一个对象?EF6.

你为什么不这样做呢?

public MyObject{
    public long Id { get; set; }
    public string Name { get; set; }
    public ICollection<MyObject> Parents { get; set; }
    public ICollection<MyObject> Children { get; set; }
}