我已经定义了这样的两家公司之间的贸易关系...
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的列。
有人能告诉我如何定义这种关系,以至于我没有额外的列吗?
答案 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)