ASP.NET MVC3 ortamında Entity Framework 5 içindeki bir kaydı düzenlemek / güncellemek için farklı yöntemler araştırıyorum, ancak şimdiye kadar hiçbiri ihtiyacım olan tüm kutuları işaretliyor. Nedenini açıklayacağım.
Artılarını ve eksilerini anlatacağım üç yöntem buldum:
Yöntem 1 - Orijinal kaydı yükleyin, her özelliği güncelleyin
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();
}
Artıları
- Hangi özelliklerin değişeceğini belirleyebilir
- Görünümlerin her mülkü içermesi gerekmez
Eksileri
- Orijinali yüklemek ve güncellemek için veritabanında 2 x sorgu
Yöntem 2 - Orijinal kaydı yükleyin, değiştirilen değerleri ayarlayın
var original = db.Users.Find(updatedUser.UserId);
if (original != null)
{
db.Entry(original).CurrentValues.SetValues(updatedUser);
db.SaveChanges();
}
Artıları
- Veritabanına yalnızca değiştirilmiş özellikler gönderilir
Eksileri
- Görüntülemelerin her mülkü içermesi gerekir
- Orijinali yüklemek ve güncellemek için veritabanında 2 x sorgu
Yöntem 3 - Güncellenmiş kaydı ekleyin ve EntityState'e durumu ayarlayın.
db.Users.Attach(updatedUser);
db.Entry(updatedUser).State = EntityState.Modified;
db.SaveChanges();
Artıları
- Güncellemek için veritabanında 1 x sorgu
Eksileri
- Hangi özelliklerin değişeceğini belirleyemiyorum
- Görünümler her mülkü içermelidir
Soru
Size olan sorum; bu hedeflere ulaşmamın temiz bir yolu var mı?
- Hangi özelliklerin değişeceğini belirleyebilir
- Görünümlerin her mülkü içermesi gerekmez (şifre gibi!)
- Güncellemek için veritabanında 1 x sorgu
Bunun dikkat çeken küçük bir şey olduğunu anlıyorum, ancak bunun için basit bir çözümü kaçırıyor olabilirim. Aksi takdirde yöntem geçerli olacaktır ;-)