私はバッチ作業をしています。既存のエンティティ間に新しい関係を追加する必要があります。エンティティには大きなデータがあり、エンティティを取得して追加できません。これを試しました:
for .........
Class Class = new Class() { ClassID = myClassId };
context.AddToClasses(Class);
Student std = new Student() { Id = myStdId };
context.AddToStudents(std);
context.ObjectStateManager.ChangeObjectState(Class, System.Data.EntityState.Unchanged);
context.ObjectStateManager.ChangeObjectState(std, System.Data.EntityState.Unchanged);
Class.ClassStudents.Add(std);
.............
最初の呼び出しは成功しますが、2 番目の呼び出しでは次の例外が発生します。
オブジェクトのキー値が ObjectStateManager 内の別のオブジェクトと競合するため、AcceptChanges を続行できません。AcceptChanges を呼び出す前に、キー値が一意であることを確認してください。
試した:
for .........
Class Class = new Class() { ClassID = myClassId };
context.Attach(Class);
Student std = new Student() { Id = myStdId };
context.Attach(std);
context.ObjectStateManager.ChangeObjectState(Class, System.Data.EntityState.Unchanged);
context.ObjectStateManager.ChangeObjectState(std, System.Data.EntityState.Unchanged);
Class.ClassStudents.Add(std);
.............
例外:
null EntityKey 値を持つオブジェクトは、オブジェクト コンテキストにアタッチできません。
これどうやってするの?