EF POCO で .NET 4.0 を使用しています。画像に一部が示されている概念モデルがあります。私が2日間ほとんど忙しくて、まだうまくいかないことを除いて、すべてうまくいきます!
私の概念モデルでは、WebShop は 1 つ以上の関連する WebShopCategory インスタンスを持つことができます。各 WebShopCategory は、WebShop をカテゴリに関連付け、WebShop/Category の組み合わせに対して追加のプロパティを指定できるようにします。
ここで画像を参照してください:http://postimage.org/image/djrn4xh37/
もちろん、新しい WebShop インスタンスを作成するときは、それを保存する必要があります。これは、以下のコードに示すように、EF ObjectContext を使用する WebShopRepository の Update メソッドで行います。
using (MyEntities entities = new MyEntities()) {
if (webShop.ID == 0) {
entities.Countries.Attach(webShop.Country);
foreach (PaymentMethod paymentMethod in webShop.PaymentMethods) {
entities.PaymentMethods.Attach(paymentMethod);
}
foreach (QualityMark qualityMark in webShop.QualityMarks) {
entities.QualityMarks.Attach(qualityMark);
}
foreach (WebShopCategory category in webShop.Categories) {
entities.Categories.Attach(category.Category);
}
entities.WebShops.AddObject(webShop);
}
entities.SaveChanges();
}
1 つ注意すべき点は、すべての関連アイテムがデータ ソースに既に存在することです。それらはまだ ObjectContext にないため、作成した WebShop を ObjectContext に追加する前にそれらをアタッチしました。これは期待どおりに機能しているようです。アタッチされたすべてのエンティティには、正しい EntityState.Unchaged 状態があります。追加された WebShop は、これも正しい [追加済み] 状態にあります。
ただし、Category インスタンス (category.Category) をアタッチすると、オブジェクト コンテキストに同じキーを持つアイテムが既に存在することを示す例外が EF によって発生する可能性があります。この ObjectStateEntry インスタンスを見つけましたが、EntityKey は EntitySet 名のみで構成されており、ID もキーに含まれていないことに気付きました。コンテキストに追加された他の EntityKeys はすべて次の形式です。EntitySetName;ID=value
私には、エンティティ キーが何らかの形で EF によって正しく決定されていないようです。なぜなら、それがうまくいかない時点で、追加されたカテゴリが実際に有効であることを確認したからです。これは、システムで既に知られているカテゴリです。主キー (ID) の値が 1 に設定されています (これは、システムで最初に追加されたカテゴリです)。
これを修正するために多くの方法を試しましたが、これを機能させることができません。どんな助けでも大歓迎です!
よろしくお願いします!