2014-09-01 47 views
1

我使用EF 6,Code First。我有一个“联系”实体,一个“客户”和一个“制造商”。客户和制造商都有联系实体列表。也许在开发过程中可能会有更多的实体与联系实体列表。如何塑造联系实体,以便我没有单独的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; } 
} 

现在我必须包括制造商和客户,而不是制造商或客户。在ModelBuilder中放置“... HasOptional(...)”并不能解决问题。

?????

回答

1

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

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

Read about it here.

+0

错过了 “InverseProperty” 属性,现在它正在工作。谢谢! – okieh 2014-09-01 11:33:02