編集: スタブ エンティティの定義
サブスクライバーとアドオンの 2 つのエンティティ タイプがあります。
データモデルでの定義は次のとおりです
サブスクライバー( #SubscriberID ,Name,AddOnID)
AddOn( #AddOnID ,名前)
Subscriber テーブルの AddOnID 列は、AddOn テーブルの AddOnID 列を参照します。
特定の Subscriber エンティティの AddOn 参照を更新しようとしています。たとえば、Subscriber#1 の AddOn 参照を AddOn#5 に変更したいとします。コードは次のとおりです。
Subscriber subscriber = new Subscriber { SubscriberID = 1};
AddOn newAddOn = new AddOn { AddOnID = 5};
using (var context = new TestEntities())
{
context.AttachTo("AddOn", newAddOn);
context.AttachTo("Subscriber", subscriber);
subscriber.Name = "dummy";
subscriber.AddOn = newAddOn;
context.SaveChanges();
}
これにより、「 context.SaveChanges();」行で例外がスローされます。
AssociationSet 'FK-Subscriber-AddOn' から関係を追加または削除しています。カーディナリティの制約により、対応する「サブスクライバー」も追加または削除する必要があります。
「subscriber.AddOn = newAddOn;」行をコメントアウトすると、更新操作は正常に機能します。
では、非参照プロパティを更新するのと同じように参照プロパティを更新できないのはなぜですか?
注: それが正しい方法かどうかはわかりませんが、「context.Refresh(RefreshMode.StoreWins,subscriber); " OR " context.Refresh(RefreshMode.ClietWins,subscriber); " を attach ステートメントの後に追加すると機能します。
この動作はなぜですか?