2

私のコードは次のようになります: (「ユーザー」は、編集後にビューから返された UserProfile インスタンスです)

UserProfile original = DBContext.UserProfiles.Where(x => x.UserId == user.UserId).FirstOrDefault();
if (original != null)
{
   original = user;
   DAL.DAL.Instance.TGIMobiledb.SaveChanges();
}

このコードはエラーなしで実行されますが、DB は更新されません。いくつかの調査の後、SaveChanges() を呼び出す前に次の行を追加する必要があるようです

DBContext.Entry(original).State = EntityState.Modified;

しかし、そのコード行により、
「同じキーを持つオブジェクトが既に ObjectStateManager に存在します。ObjectStateManager は、同じキーを持つ複数のオブジェクトを追跡できません。」というエラーが発生します。

次のようにすべてのフィールドを手動で割り当てると、変更がデータベースに保存されます。

original.UserId = user.UserId;
original.FirstName = user.FirstName;
original.Surname = user.Surname;
original.UserName = user.UserName;

明らかに、これは最適とは言えません。特に大規模なエンティティではそうです。

4

2 に答える 2