Saya telah menjelajahi berbagai metode pengeditan / memperbarui catatan dalam Entity Framework 5 di lingkungan ASP.NET MVC3, tetapi sejauh ini tidak ada yang mencentang semua kotak yang saya butuhkan. Saya akan menjelaskan alasannya.
Saya telah menemukan tiga metode yang akan saya sebutkan pro dan kontra:
Metode 1 - Memuat catatan asli, perbarui setiap properti
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();
}
Pro
- Dapat menentukan properti mana yang berubah
- Tampilan tidak perlu mengandung setiap properti
Cons
- 2 x permintaan pada basis data untuk memuat yang asli lalu memperbaruinya
Metode 2 - Memuat catatan asli, atur nilai yang diubah
var original = db.Users.Find(updatedUser.UserId);
if (original != null)
{
db.Entry(original).CurrentValues.SetValues(updatedUser);
db.SaveChanges();
}
Pro
- Hanya properti yang dimodifikasi yang dikirim ke database
Cons
- Tampilan harus mengandung setiap properti
- 2 x permintaan pada basis data untuk memuat yang asli lalu memperbaruinya
Metode 3 - Lampirkan catatan yang diperbarui dan setel status ke EntityState.Modified
db.Users.Attach(updatedUser);
db.Entry(updatedUser).State = EntityState.Modified;
db.SaveChanges();
Pro
- 1 x permintaan pada basis data untuk memperbarui
Cons
- Tidak dapat menentukan properti mana yang berubah
- Tampilan harus mengandung setiap properti
Pertanyaan
Pertanyaan saya untuk kalian Adakah cara yang bersih untuk mencapai serangkaian tujuan ini?
- Dapat menentukan properti mana yang berubah
- Tampilan tidak perlu mengandung setiap properti (seperti kata sandi!)
- 1 x permintaan pada basis data untuk memperbarui
Saya mengerti ini hal yang cukup kecil untuk ditunjukkan tetapi saya mungkin kehilangan solusi sederhana untuk ini. Jika tidak metode satu akan menang ;-)