Ich habe verschiedene Methoden zum Bearbeiten/Aktualisieren eines Datensatzes innerhalb von Entity Framework 5 in einer ASP.NET MVC3-Umgebung untersucht, aber bisher erfüllt keine von ihnen alle Anforderungen, die ich habe. Ich werde erklären, warum.
Ich habe drei Methoden gefunden, zu denen ich die Vor- und Nachteile nennen werde:
Methode 1 - Originaldatensatz laden, jede Eigenschaft aktualisieren
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();
}
Profis
- Kann angeben, welche Eigenschaften sich ändern
- Ansichten müssen nicht jede Eigenschaft enthalten
Nachteile
- 2 x Abfragen der Datenbank, um das Original zu laden und dann zu aktualisieren
Methode 2 - Originaldatensatz laden, geänderte Werte einstellen
var original = db.Users.Find(updatedUser.UserId);
if (original != null)
{
db.Entry(original).CurrentValues.SetValues(updatedUser);
db.SaveChanges();
}
Profis
- Nur geänderte Eigenschaften werden an die Datenbank gesendet
Nachteile
- Ansichten müssen jede Eigenschaft enthalten
- 2 x Abfragen der Datenbank, um das Original zu laden und dann zu aktualisieren
Methode 3 - Aktualisierten Datensatz anhängen und Status auf EntityState.Modified setzen
db.Users.Attach(updatedUser);
db.Entry(updatedUser).State = EntityState.Modified;
db.SaveChanges();
Profis
- 1 x Abfrage der Datenbank zur Aktualisierung
Nachteile
- Kann nicht angeben, welche Eigenschaften sich ändern
- Ansichten müssen jede Eigenschaft enthalten
Pregunta
Meine Frage an euch: Gibt es einen sauberen Weg, wie ich diese Ziele erreichen kann?
- Kann angeben, welche Eigenschaften sich ändern
- Ansichten müssen nicht jede Eigenschaft enthalten (z. B. das Passwort!)
- 1 x Abfrage der Datenbank zur Aktualisierung
Mir ist klar, dass dies nur eine Kleinigkeit ist, aber vielleicht übersehe ich eine einfache Lösung für dieses Problem. Wenn nicht, wird sich Methode eins durchsetzen ;-)