0

我有这个数据库

Packages (packageID, package_name , .... )
PackageVariant (packageID, variantID)
Variant (variantID, variant_name, .... )
VariantProduct (variantID, productID, quantity)
Product (productID, product_name, .... )

我已经在实体框架中对其进行了建模,我不知道多重性,但它们应该基于以下:

一个包可以有无或多个变体
一个变体只能与一个包关联(不能是无或多个)
一个变体可以有一个或多个产品
产品与无或多个变体相关联

删除包时,必须删除该包的所有变体。
当一个变体被删除时,不需要删除其他任何东西。
删除产品时,需要删除与变体的所有关联。

如果您可以就多重性以及需要设置 OnDelete:Cascade 的位置提供帮助,那就太好了!

我还需要能够做到这一点:

var ptx = new MyEntities();
Variant newVariant = new Variant()
{
    setRelevantProperty = value
};
Product selectedProduct = ptx.Products.First(o => o.productID == productID);
newVariant.Products.Add(selectedProduct);
Package packageToAddVariantTo = ptx.Packages.First(o => o.packageID == packageID);
packageToAddVariantTo.Variants.Add(newVariant);
ptx.SaveChanges();

不会因为“没有插入、更新集”或其他任何依赖映射而出现错误。那么如何正确映射这个复杂的数据库会很好:)

我已经阅读了一些帖子,书籍,但似乎找不到答案。

谢谢

4

1 回答 1

0

Lee O 得到了答案,为了读者清楚,我将把它作为答案而不是评论重新发布:

我不确定您的问题的答案,但我会提出 1 条建议,摆脱 PackageVariant 表。当您具有多对多关系时,您只需要这样的表。只需在变量表中添加一个名为 packageId 的列,并将其设置为包表的外键而不是 null。这将严格执行每个变体 1 个包的规则。但是每个包都没有多个变体。

谢谢李

于 2013-01-21T09:52:12.840 回答