私はASP.NET MVC3環境のEntity Framework 5内でレコードを編集/更新するさまざまな方法を調査してきましたが、これまでのところ、必要なすべてのボックスにチェックを付ける方法はありません。その理由を説明します。
私は長所と短所に言及する3つの方法を見つけました。
方法1-元のレコードを読み込み、各プロパティを更新する
var original = db.Users.Find(updatedUser.UserId);
if (original != null)
{
original.BusinessEntityId = updatedUser.BusinessEntityId;
original.Email = updatedUser.Email;
original.EmployeeId = updatedUser.EmployeeId;
original.Forename = updatedUser.Forename;
original.Surname = updatedUser.Surname;
original.Telephone = updatedUser.Telephone;
original.Title = updatedUser.Title;
original.Fax = updatedUser.Fax;
original.ASPNetUserId = updatedUser.ASPNetUserId;
db.SaveChanges();
}
長所
- 変更するプロパティを指定できます
- ビューはすべてのプロパティを含む必要はありません
短所
- データベースを2回クエリしてオリジナルをロードし、更新する
方法2-元のレコードを読み込み、変更された値を設定する
var original = db.Users.Find(updatedUser.UserId);
if (original != null)
{
db.Entry(original).CurrentValues.SetValues(updatedUser);
db.SaveChanges();
}
長所
- 変更されたプロパティのみがデータベースに送信されます
短所
- ビューにはすべてのプロパティを含める必要があります
- データベースを2回クエリしてオリジナルをロードし、更新する
方法3-更新されたレコードを添付し、状態をEntityState.Modifiedに設定します
db.Users.Attach(updatedUser);
db.Entry(updatedUser).State = EntityState.Modified;
db.SaveChanges();
長所
- 更新するデータベースに対する1 xクエリ
短所
- 変更するプロパティを指定できません
- ビューにはすべてのプロパティが含まれている必要があります
質問
皆さんへの私の質問。この一連の目標を達成できるクリーンな方法はありますか?
- 変更するプロパティを指定できます
- ビューにすべてのプロパティ(パスワードなど)を含める必要はありません。
- 更新するデータベースに対する1 xクエリ
これはごくわずかなことですが、簡単な解決策がない可能性があることを理解しています。そうでない場合は1つが優先されます;-)