Ich habe verschiedene Methoden zum Bearbeiten / Aktualisieren eines Datensatzes in Entity Framework 5 in einer ASP.NET MVC3-Umgebung untersucht, aber bisher hat keine davon alle von mir benötigten Kästchen angekreuzt. Ich werde erklären warum.
Ich habe drei Methoden gefunden, bei denen ich die Vor- und Nachteile erwähnen 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();
}
Vorteile
- Kann angeben, welche Eigenschaften sich ändern
- Ansichten müssen nicht jede Eigenschaft enthalten
Nachteile
- 2 x Abfragen in 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();
}
Vorteile
- Es werden nur geänderte Eigenschaften an die Datenbank gesendet
Nachteile
- Ansichten müssen jede Eigenschaft enthalten
- 2 x Abfragen in der Datenbank, um das Original zu laden und dann zu aktualisieren
Methode 3 - Aktuellen Datensatz anhängen und Status auf EntityState.Modified setzen
db.Users.Attach(updatedUser);
db.Entry(updatedUser).State = EntityState.Modified;
db.SaveChanges();
Vorteile
- 1 x Abfrage der zu aktualisierenden Datenbank
Nachteile
- Es kann nicht angegeben werden, welche Eigenschaften sich ändern
- Ansichten müssen jede Eigenschaft enthalten
Frage
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. Passwort!)
- 1 x Abfrage der zu aktualisierenden Datenbank
Ich verstehe, dass dies nur eine Kleinigkeit ist, aber ich vermisse möglicherweise eine einfache Lösung dafür. Wenn nicht Methode wird man sich durchsetzen ;-)