私のコードは次のようになります: (「ユーザー」は、編集後にビューから返された 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;
明らかに、これは最適とは言えません。特に大規模なエンティティではそうです。