0

私はこのデータベースを持っています

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

Entity Framework でモデル化しました。多重度はわかりませんが、以下に基づいている必要があります。

パッケージは、なしまたは複数のバリアントを
持つことができます バリアントは、1 つのパッケージのみに関連付けることができます (なしまたは複数にすることはできません)
1 つのバリアントは、1 つまたは複数の製品を持つことができます
製品は、なしまたは複数のバリアントに関連付けられます

パッケージが削除されると、そのパッケージのすべてのバリアントを削除する必要があります。
バリアントが削除されると、他に削除する必要はありません。
製品が削除されると、バリアントとのすべての関連付けを削除する必要があります。

多重度と 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 に答える