2016-08-08 12 views
0

Ist es möglich, Objekte mit Entity Framework zu aktualisieren, ohne sie zuerst zu erfassen?Objekt ohne EF6 aktualisieren MySQL

Beispiel: Hier habe ich eine Funktion, die einen Primärschlüssel zum Lokalisieren der Objekte bereitstellt, sie zieht und dann aktualisiert. Ich möchte beseitigen, die Objekte zuerst ziehen zu müssen, und einfach eine UPDATE-Abfrage ausführen. Entfernen der Notwendigkeit, dass die SELECT-Abfrage generiert wird.

public async Task<int> UpdateChecks(long? acctId, string payorname, string checkaccountnumber, string checkroutingnumber, string checkaccounttype) 
    { 
     using (var max = new Max(_max.ConnectionString)) 
     { 
      var payments = await 
       max.payments.Where(
        w => 
         w.maindatabaseid == acctId && (w.paymentstatus == "PENDING" || w.paymentstatus == "HOLD")).ToListAsync(); 

      payments.AsParallel().ForAll(payment => 
      { 
       payment.payorname = payorname; 
       payment.checkaccountnumber = checkaccountnumber; 
       payment.checkroutingnumber = checkroutingnumber; 
       payment.checkaccounttype = checkaccounttype; 
       payment.paymentmethod = "CHECK"; 
       payment.paymentstatus = "HOLD"; 
      }); 

      await max.SaveChangesAsync(); 
      return payments.Count; 
     } 
    } 
+0

Ich glaube nicht, dass es möglich ist, ohne einige Drittanbieter-Bibliothek zu verwenden. – sstan

+0

Sie können Folgendes sehen: [Entity Framework Extended Library] (https://github.com/loresoft/EntityFramework.Extended). Laut ihrer Seite macht es genau das, wonach Sie suchen. Aber ich habe mich nie mit den neuesten Versionen von EF6 versucht, also weiß ich nicht, wie gut es funktioniert. – sstan

+0

Duplizieren: http://StackOverflow.com/Questions/4218566/Update-Arecord-without-first-querying –

Antwort

0

können Sie den Attach() Befehl verwenden Sie bereits eine Einheit zu befestigen wissen existiert und SaveChanges() dann Methode das entsprechende Update rufen nennen. Hier ist ein Beispielcode aus den MSDN article zum Thema:

zum Thema:

var existingBlog = new Blog { BlogId = 1, Name = "ADO.NET Blog" }; 

using (var context = new BloggingContext()) 
{ 
    context.Entry(existingBlog).State = EntityState.Unchanged; 

    // Do some more work... 

    context.SaveChanges(); 
} 

Hinweis, dass dies allgemein EF-Logik, die nicht mit irgendeiner bestimmten Datenbank-Implementierung.

+0

Ist es möglich, nur so etwas wie den Primärschlüssel im Mock-Objekt zu liefern und dann einen bestimmten Feldwert zu setzen und nur diesen Feldwert zu aktualisieren? –

+0

@AdamReed Es ist, aber in der Regel beinhaltet es das Überschreiben ein wenig Logik und Ändern des Entitätsstatus für diese Eigenschaften, wie hier beschrieben: http://codereview.stackexchange.com/questions/37304/update-only-modified-fields- In-entity-framework Wie in den Kommentaren erwähnt, müssen Sie sich jedoch oft keine Gedanken darüber machen, es sei denn, es gibt Gründe, nur diese spezifischen Felder zu ändern. –

+0

Eine Datenbank, mit der ich arbeite, hat weit über 200 Felder (leider) und ich muss ständig nur ein einzelnes Feld aktualisieren. Wenn ich den Objektprimärschlüssel nur in dem Objekt anlege, das ich anschließe und ein einzelnes Feld aktualisiere und diesen Feldzustand einstelle, wird es dann nur dieses spezifische Feld aktualisieren? Oder muss ich jedes andere Feld auf unverändert setzen. –

Verwandte Themen