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 クエリ
これは指摘するのは非常に些細なことだと理解していますが、これに対する簡単な解決策を見逃している可能性があります。そうでない場合は、方法が優先されます;-)