C# 实体框架自引用1对1可选关系

C# 实体框架自引用1对1可选关系,c#,asp.net,entity-framework,dbcontext,C#,Asp.net,Entity Framework,Dbcontext,因此,我有一个名为Contact的表,它可以是不同类型的。我希望表本身能够有一个一对一、一对多或一对零/一的关系。可能吗?如果是,怎么做 例如,联系人可以有配偶,这只是数据库中的另一个联系人。联系人也可以是Organization类型,在这种情况下,联系人可以与其他联系人建立一对多关系 这就是我在domain类中所做的 public class Contact { public Contact() { public int ContactId {get; set;} ..

因此,我有一个名为Contact的表,它可以是不同类型的。我希望表本身能够有一个一对一、一对多或一对零/一的关系。可能吗?如果是,怎么做

例如,联系人可以有配偶,这只是数据库中的另一个联系人。联系人也可以是Organization类型,在这种情况下,联系人可以与其他联系人建立一对多关系

这就是我在domain类中所做的

public class Contact
{
  public Contact()
  {
    public int ContactId {get; set;}
    ...
    public int SpouseId {get; set;}
    public virtual Contact Spouse {get; set;}
    public in OrgId {get; set;}
    public virtual Contact Organization {get; set;}

    private ICollection<Contact> _individuals;
    public virtual ICollection<Contact> Individuals
    {
      get {return _individuals;}
      set {_individuals = value; }
    }
    ...
  }
}
公共类联系人
{
公众联络()
{
public int ContactId{get;set;}
...
公共int-spoutseid{get;set;}
公共虚拟联系人{get;set;}
OrgId{get;set;}中的公共
公共虚拟联系人组织{get;set;}
私人收集(个人);;
公共虚拟ICollection个人
{
获取{return}
设置{u个体=值;}
}
...
}
}

我需要知道如何在上下文中的OnModelCreating()中正确映射这一点。任何帮助都将不胜感激。

这里有股腥味。如果一个组织是一个联系人,并且联系人有配偶,那么该组织是否有配偶

我认为您需要一个contactBase类:

public class Contact {
   int ContactId
   ICollection<Contact> Contacts
   EntityTypeEnum EntityType
}
公共类联系人{
int联系人ID
I收集触点
EntityTypeEnum EntityType
}
但仔细想想,您可能想切换到图形数据库,因为它听起来像是您描述节点和关系的方式


希望有帮助

完全可能,但你必须将一对一的关系表示为一个元素集合。配偶是1-0..1关系。本组织也是如此。contactBase类应该是父类吗?所有联系人/组织/配偶都从中继承?是的。您将拥有一个人:ContactBase和一个组织:ComContactBase。这样你就可以把配偶作为个人而不是组织的财产。(配偶只是另一个人的例子)。