我正在嘗試定義與供應商,經銷商和零售商的供應鏈。這些實體受合同類的約束,該類還定義了ProductLine和他們將使用的產品。 對於給定的ProductLine,供應商(該ProductLine的唯一所有者)和經銷商之間會有合同,然後是該經銷商和零售商之間的另一個合同。EF 4.1上的接口和多重約束衝突代碼優先
問題是兩個經銷商之間也有合同,所以我嘗試創建兩個接口(ISeller和IBuyer)。供應商實現ISeller,零售商實現IBuyer和經銷商實現兩個接口:
public class Supplier : ISeller
{
public int Id { get; set; }
public virtual ICollection<Contract> Contracts { get; set; }
}
public class Dealer : ISeller, IBuyer
{
public int Id { get; set; }
public virtual ICollection<Contract> Contracts { get; set; }
}
public class Retailer : IBuyer
{
public int Id { get; set; }
public virtual ICollection<Contract> Contracts { get; set; }
}
然後將合同界定出ISeller到IBuyer,像這樣:
public class Contract
{
public int Id { get; set; }
public virtual ISeller Seller { get; set; }
public virtual IBuyer Buyer { get; set; }
}
創建供應商/經銷商或經銷商/零售商之間的合同按預期工作,但在嘗試創建經銷商/經銷商合同時,我得到'多重約束違反'。
你可以看看從你的類設計中生成的數據庫模式嗎?這可能會揭示爲什麼這種關係有問題。 –
是的,我忘記提到合約表的佈局有點奇怪: Id | Supplier_Id | Dealer_Id |零售商_Id 這種方式很明顯,我不能在同一合同中擁有兩個經銷商。也許我應該使用自定義映射來幫助EF瞭解我正在嘗試做什麼。問題是我對Fluent API不太熟練。 :) –
那麼,那是你的問題。儘管如此,我還不太瞭解EF Code First,所以這是我個人可以提供的所有幫助。 –