实体框架 - 与父母不同的孩子

时间:2014-09-01 11:16:58

标签: c# entity-framework

我正在使用EF 6,Code First。我有一个"联系人"实体,"客户"和#34;制造商"。客户和制造商都有联系实体列表。也许在开发期间,可以有更多具有联系人实体列表的实体。如何塑造联系人实体,以便我没有单独的ID作为客户和制造商的外键?我想到的是:

public class Contact
{
    [Key]
    public int Id { get; set; }
    ...

    public int ParentId { get; set; }

    [ForeignKey("ParentId")]
    public virtual Customer Customer { get; set; }

    [ForeignKey("ParentId")]
    public virtual Manufacturer Manufacturer { get; set; }
}

这可能吗?


修改 似乎 不容易。我做的是以下内容:

public class Customer 
{
    ...
    [InverseProperty("Customer")]
    public virtual ICollection<Contact> Contacts { get; set; }
    ....
}

public class Manufacturer
{
    ...
    [InverseProperty("Manufacturer")]
    public virtual ICollection<Contact> Contacts { get; set; }
    ...
}

public class Contact
{
    public int? ParentId { get; set; }

    [ForeignKey("ParentId")]
    public virtual Manufacturer Manufacturer { get; set; }

    [ForeignKey("ParentId")]
    public virtual Customer Customer { get; set; }
}

现在我必须包括制造商和客户而非制造商或客户。放一个&#34; ... HasOptional(...)&#34;在模型构建器中没有解决问题。

????

1 个答案:

答案 0 :(得分:1)

您需要在客户和制造商字段中使用InverseProperty属性,例如

[InverseProperty("Id")]
[ForeignKey("ParentId")]
public virtual Customer Customer { get; set; }

Read about it here.