如何通过ID和鉴别器在实体框架中引用

时间:2017-03-21 14:14:46

标签: c# entity-framework

我想引用每个参考对象的不同类型的联系人。 我有我想扩展的给定EF结构。

public class Contact {}
public class Customer : Contact {}
public class Salesperson : Contact {}
public class Producer : Contact {}
public class ContactPerson : Contact {}

首先是代码,数据库包含以下表格:客户,销售人员,生产者和联系人(没有联系表)。

现在我想在这些实体之间创建引用。例如。两个客户之间的子女关系或为客户或制作人设置联系人。我想为这些不同的关系使用一个关系类。

我的想法是创建一个像这样的ContactRelation:

public enum RelationRole : short {
   Child,
   ContactPerson,
   Head
}

public class ContactRelation {
   Guid ParentId { get; set; }
   string ParentType { get; set; }
   Guid ChildId { get; set; }
   string ChildType { get; set; }
   RelationRole Role { get; set; }
}

但我想让关系真正引用联系人,所以我可以轻松处理它们。有没有办法教EF这种参考?我需要这样的东西(在每个ContactType中)

public class Customer : Contact {
   [ForeignKey("ParentId")]
   //PSEUDO CODE! How to achieve something like this???
   [Discriminator("ParentType", "Customer")] 
   public ICollection<ContactRelations> Children { get; set; }
   [ForeignKey("ChildId")]
   //PSEUDO CODE! How to achieve something like this???
   [Discriminator("ChildType", "Customer")] 
   public ICollection<ContactRelations> Children { get; set; }
}

如何将此教授给EF并在将ContactRelations添加到集合时正确设置类型?

编辑可能最后一部分应该是基类联系

的一部分

0 个答案:

没有答案