我正在尝试定义与供应商,经销商和零售商的供应链。这些实体受合同类的约束,该类还定义了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,所以这是我个人可以提供的所有帮助。 –