Entity Framework 5 Aktualizacja rekordu
Badałem różne metody edycji / aktualizacji rekordu w Entity Framework 5 w środowisku ASP.NET MVC3, ale jak dotąd żaden z nich nie zaznaczył wszystkich potrzebnych mi pól. Wyjaśnię dlaczego.
Znalazłem trzy metody, o których wspomnę za i przeciw:
Metoda 1 - Załaduj oryginalny rekord, zaktualizuj każdą właściwość
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();
}
Plusy
Może określić, które właściwości się zmieniająWidoki nie muszą zawierać każdej właściwościCons
2 x zapytania do bazy danych, aby załadować oryginał, a następnie zaktualizować goMetoda 2 - Załaduj oryginalny rekord, ustaw zmienione wartości
var original = db.Users.Find(updatedUser.UserId);
if (original != null)
{
db.Entry(original).CurrentValues.SetValues(updatedUser);
db.SaveChanges();
}
Plusy
Tylko zmodyfikowane właściwości są wysyłane do bazy danychCons
Widoki muszą zawierać każdą właściwość2 x zapytania do bazy danych, aby załadować oryginał, a następnie zaktualizować goMetoda 3 - Dołącz zaktualizowany rekord i ustaw stan na EntityState.Modified
db.Users.Attach(updatedUser);
db.Entry(updatedUser).State = EntityState.Modified;
db.SaveChanges();
Plusy
1 x zapytanie do bazy danych o aktualizacjęCons
Nie można określić, które właściwości się zmieniąWidoki muszą zawierać każdą właściwośćPytanie
Moje pytanie do was; czy istnieje czysty sposób na osiągnięcie tego celu?
Może określić, które właściwości się zmieniająWidoki nie muszą zawierać wszystkich właściwości (takich jak hasło!)1 x zapytanie do bazy danych o aktualizacjęRozumiem, że to dość drobna sprawa, ale może mi brakować prostego rozwiązania tego problemu. Jeśli nie metoda pierwsza zwycięży ;-)