EF复杂关系定义

时间:2016-02-23 09:11:03

标签: c# entity-framework entity-framework-6 relationship

我已经定义了这样的两家公司之间的贸易关系...

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

    [ForeignKey("Supplier")]
    public int SupplierCompanyId { get; set; }

    [ForeignKey("Buyer")]
    public int BuyerCompanyId { get; set; }

    public virtual Company Supplier { get; set; }

    public virtual Company Buyer { get; set; }
}

......当然,公司与许多这样的贸易关系有关系......

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

    public virtual ICollection<TradingRelationship> TradingRelationships { get; set; }
}

...我的问题是,当EF生成表格时,我不仅会出现买方和供应商ID,还会出于某种原因在交易关系表上添加一个名为Company_Id的列。

有人能告诉我如何定义这种关系,以至于我没有额外的列吗?

2 个答案:

答案 0 :(得分:1)

我认为您有一个错误:当您在公司中定义TradingRelationships时,您希望将其映射到TradingRelationship类中的两个属性:供应商和买方以及EF混淆。我认为这个解决方案可以帮到你:

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

    [InverseProperty("Supplier ")]
    public virtual ICollection<TradingRelationship> TradingRelationshipsSupplier  { get; set; }

    [InverseProperty("Buyer ")]
    public virtual ICollection<TradingRelationship> TradingRelationshipsBuyer  { get; set; }
}

答案 1 :(得分:0)

可能的解决方案是,ICollection<TradingRelationship>引用不是模型的一部分。在Company模型中删除此行时:

public virtual ICollection<TradingRelationship> TradingRelationships { get; set; }

您的数据库应该是您想要的。如果您想让所有TradingRelationships引用Company,您可以使用Linq:

TradingRelationships.Where(t => t.Supplier == company || t.Buyer == company)