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);
    }
InformationsquelleAutor jason | 2013-01-03
Schreibe einen Kommentar