質問: 2; context.PersonsRoles.Update(du); context.SaveChanges(); //get an error here ``` "未処理の例外が発生しました:エンティティタイプ 'PersonRole'のプロパティ 'RoleId'がキーの一部であるため、変更または修正済みとしてマークすることはできません。 (以下のコメントあたりのETA) - 私のモデルは: ``` public class PersonRole { public virtual int PersonId { get; set; } public virtual int RoleId { get; set; } } ``` 私は元の行(1、1)を削除してから再挿入(1,2)するオプションを含む答えを見つけましたが、それは私にとっては非効率的です。それは本当に関係を変更する唯一の方法ですか?
回答: 一方の多対多リレーションシップのキーを変更しようとしています。リレーションシップの両側の外部キーを保持するテーブルを使用して、多対多リレーションシップがデータベースに表されます。 あなたがしようとしているのは、オブジェクトのキーを変更しようとしていますが、NNテーブルの値が更新されていないため、外部キーテーブルに参照が保持されています。 この変更はEF7では許可されていません。多対多テーブルの更新を考慮する代わりに、SQLコマンドを使用してください。