簡體   English   中英

使用實體框架的復雜關系映射

[英]Complex Relationship Mapping using Entity Framework

我有這個數據庫

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();

不會由於“沒有插入,更新集”或任何其他依賴於映射的錯誤而出錯。 因此,如何正確映射此復雜數據庫將是一個好方法:)

我已經閱讀了一些帖子,書籍,但似乎找不到答案。

謝謝

Lee O得到了答案,為了方便讀者閱讀,我將其重新發布為答案,而不是發表評論:

我不確定您的問題的答案,但我會提出1條建議,擺脫PackageVariant表。 當您具有多對多關系時,只需要一個這樣的表。 只需在變量表中添加一列稱為packageId並將其作為包表的外鍵即可,而不是null。 這將嚴格執行每個變體1個軟件包的規則。 但是每個軟件包都沒有多個變體。

謝謝李

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM