ナビゲーターを介して参照する新しいエンティティを既存のエンティティに追加すると、Entity Framework4に問題が発生します。コードを見てください:
ControlPolicy cp1 = new ControlPolicy()
{
ControlPolicyLevelType = 2, //full access to NA
MemberState = context.Countries.First(tt => tt.IsMemberState),
OperaModuleType = 2,
MemberStateIncluded = true,
CreateDate = DateTime.Now,
CreatedByUserId = 1,
};
context.ControlPolicies.AddObject(cp1);
context.SaveChanges();
エラーは次のとおりです。
'ControlPolicy_MemberState_Country_'AssociationSetからの関係は'追加 '状態にあります。多重度の制約がある場合、対応する「国」も「追加」状態である必要があります。
ChangeTrackerを見ると、ControlPolicyオブジェクトは実際には「追加」状態ですが、国1は「未定義」状態です。それは正しいと思います。結局、新しいオブジェクトを追加するのではなく、既存の国を参照するだけです。
この特定のケースでは、間違ったEFモデルでミスが発生しました。MemberStateとCountryは1対1の関係にあったため、EFの場合、ControlPolicyを追加するときに、新しいMemberState(国)も定義する必要があることは明らかでした。ナビゲーターの関係が適切なm:1 MemberState:Countryに変更されると、すべてが機能し始めました。
それに加えて、Rui JarimbaFKの提案はとても良いと思います。ここでは問題ではなく、ChangeTrackerを使用しているため、私の場合は適用できませんでした。明らかに、ChangeTrackerはFKを介して行われた変更について知りません。ただし、それ以外の場合は、外部キーを使用すると非常に便利で便利です。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加