EF 4.0 でエンティティを保存しようとすると、奇妙な動作が発生します。
1 つの String-Property を持つ単純な複合型を考えてみてください。次に、この複雑なタイプのいくつかの複雑なプロパティを含むエンティティ POCO クラス (実際には STE ですが、それはここでは重要ではありません) があります。
次に、次のコードで動作を示すことができます。
var object = context.Records.Where(p => p.ID = requestedID).First(); // works
object.ComplexProp1 = new ComplexTypeA(...);
context.DetectChanges(); // success
context.DetectChanges(); // NullReferenceException
このコードは、エラーを表示するためのものです。内部で DetectChanges() を呼び出す SaveChanges() を呼び出したときに実際に発生したため、このコードを使用して再現しました。私が見つけた多くのEFコードのデバッグの後、EntityEntry.FindOriginalValue()メソッド内で、2回目に元の値が見つからず、これにより他の場所で例外が発生します。これは、次の場合には発生しません。
- 複雑なプロパティを新しいインスタンスに設定するのではなく、代わりに複雑な型自体のプロパティを設定します (例: object.ComplexProp1.Value = "yes")
- 私はSTE方式を使用しています。コンテキスト 1 からオブジェクトを取得し、変更をコンテキスト 2 に適用してそこに保存します。
しかし、複合型インスタンスを常に保持することはオプションではなく、STE バリアントも同様です。これが一種のバグなのか、このエラーを防ぐために何を変更すればよいのかわかりません。そこで何が起こっているのか、少なくとも予感を持っている人はいますか? ありがとう!