Entity Framework, Wie kann ich update nur bestimmte Felder in das Modell?
Ich stellte diese Frage, aber es gab ein schallendes Gelächter, wo ich überschrieb meine eigentliche Frage
und nur code gepostet und dann war es stimmten geschlossen werden. Ich dachte die Frage
war ziemlich viel fubared und nicht seine faire Chance, so bin ich Entsendung es wieder.
Bin ich mit Entity Framework 4.1. Ich habe ein Formular, das eine gute Anzahl von Feldern auf Sie. Die Tabelle selbst hat eigentlich mehr Felder als das, was auf die form. Ich versuche einen Weg zu finden, aktualisieren Sie nur die Felder, die sich geändert haben. Ich fand ein Beispiel, das hier:
Entity Framework update partielle Modell
Habe ich überarbeitet, dass Sie den code unten, so dass ich nicht haben, um geben Sie 40+ Felder manuell. Ich bin der Hoffnung, dass es ein sauberer Weg, dies zu tun als das, was unten ist. Ist es?
Warnung: der folgende code ist ein Erster Entwurf und ist eher grob. Alle Vorschläge sind willkommen. Danke!
[HttpPost]
public ActionResult Edit(Location location, FormCollection fields)
{
if (ModelState.IsValid)
{
//db is my context
db.Locations.Attach(location);
StringBuilder sb = new StringBuilder();
//Get properties of Location object
PropertyInfo[] pi = typeof(Location).GetProperties();
//loop over keys of fields submitted by the post
foreach (string submittedField in fields.Keys)
{
//If a property name on the Location object matches a field name
//of one of the submitted properties then mark the property as
//modified
if (pi.Any(prop => prop.Name.Equals(submittedField)) &&
!"ID".Equals(submittedField) )
{
db.Entry(location).Property(submittedField).IsModified = true;
sb.AppendLine(submittedField + "Value: " + db.Entry(location).Property(submittedField).CurrentValue );
}
}
LogUtil.WriteCondensed(sb.ToString());
//Save changes to the database
db.SaveChanges();
return RedirectToAction("Index");
}
return View(location);
}
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich würde nicht verlassen sich auf das, was übergeben wird, um Ihre
Edit
Aktion zu wissen, was aktualisiert werden kann und was kann nicht aus Gründen der Sicherheit (denken Sie daran, dass was an den server gesendet werden können, die vom client geändert).Verwenden Sie In der Ansicht ein verstecktes Feld für die ID des Objekts zu aktualisieren (razor-syntax):
Ich würde dann:
Controller:
Service:
Wenn du 40+ Felder, dann ja, es ist langweilig zu schreiben, aber zumindest haben Sie die volle Kontrolle über die Eigenschaften, die aktualisiert werden können und Eigenschaften, die nicht.