创建多对多关系(EF代码优先),其中关系的每一侧都是相同的类型

时间:2014-02-18 22:30:42

标签: c# entity-framework

可能会过度思考,但我正试图建立以下关系。我有一个Organization对象。每个组织都可以拥有许多AuthorizedThirdParties。 AuthorizedThirdParties也是组织。我该如何做到这一点?对于某些情况。授权的第三方是一种说法“这个特定的组织(不是我)可以访问关于我的组织的某些信息”的方式。

组织模式(为简洁而修剪):

public class Organization
{
    [Key]
    public int OrganizationId { get; set; }
    public string Name { get; set; }
    public virtual ICollection<Organization> AuthorizedThirdParties { get; set; }
}

我正在考虑做一些流利的API,但似乎无法弄清楚如何。我已经建立了一些其他m2m关系,但每个都引用了不同的模型(如组织和用户)。

2 个答案:

答案 0 :(得分:1)

你不是在思考它。数据结构很复杂,应该正确完成。您描述的数据结构是graph。表示图表的方法有很多种。其中包括:

  • 邻接列表
  • 发病率清单
  • 邻接矩阵
  • 发生率矩阵

根据您的预期用途,每个人都有自己的利弊。要获得起点,请点击维基百科:

最好的办法是研究如何表示数据以及如何存储数据,这里是一个起始链接:

答案 1 :(得分:1)

如果关系是多对多(组织可以有许多AuthorizedThirdParties,组织可以是许多其他组织的授权第三方),您只需使用标准映射。目标实体是相同还是不同没有什么特别之处:

modelBuilder.Entity<Organization>()
    .HasMany(o => o.AuthorizedThirdParties)
    .WithMany()
    .Map(m =>
    {
        m.ToTable("AuthorizedThirdPartyMap");
        m.MapLeftKey("OrganizationId");
        m.MapRightKey("AuthorizedThirdPartyId");
    });