我有这个数据库
Packages (packageID, package_name , .... )
PackageVariant (packageID, variantID)
Variant (variantID, variant_name, .... )
VariantProduct (variantID, productID, quantity)
Product (productID, product_name, .... )
我已在实体框架中对其进行了建模,我不知道多重性,但它们应基于以下内容:
包可以包含无变量或多变量
变体只能与一个包相关联(不能为无或多个)
一个变体可以有一个或多个产品
产品与无变体或多变量相关联
删除包时,必须删除该包的所有变体
删除Variant时,不需要删除任何其他内容
删除产品时,需要删除与变体的所有关联。
如果您可以提供有关多重性的帮助,以及需要设置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();
没有因“没有插入,更新集”或其他任何依赖映射的错误而导致错误。那么如何正确映射这个复杂的数据库会很好:)
我看了几篇帖子,书籍,我似乎无法找到答案。
由于
答案 0 :(得分:0)
Lee O得到了答案,我只是将其作为答案发布,而不是评论读者的清晰度:
我不确定你的问题的答案,但我会提出一个建议,摆脱PackageVariant表。当你有多个到多个关系时,你只需要一个这样的表。只需在变量表中添加一个名为packageId的列,并使其成为包表的外键,而不是null。这将根据变体强制执行1个包的规则。但是每个包都没有多个变体。
谢谢李