2016-08-31 6 views
-1

Ich benutze ef in einem Webapi-Projekt.In Funktion A, ändere ich die Eigenschaft A einer Einheit, Funktion B, ich ändere die Eigenschaft B. Wenn ich auf diese bei der Post gleichzeitig fand ich nur eine Eigenschaft modifiziert wurde, ich bin vielen Erfolg sicher Beiträge, aber wie kann ich diese 2.EF update eine Zeile zur gleichen Zeit

using (NielsenPMContext db = new NielsenPMContext()) 
    { 
    var member = db.Members.Find(openid); 
    member.A=a; 
    db.Entry(member).State = EntityState.Modified; 

    db.SaveChanges(); 
    } 
+0

wo ist Ihre Funktion A und Funktion B? Kannst du das auch? – Sampath

+0

@Sampath die Antwort unten ist, was ich meine, A & B sind die gleichen, aber ändern Sie die verschiedenen Requisiten der Entität. Ich habe es gelöst, ty auch! – Nico

Antwort

1

Sie sollten in beiden Methoden verwenden, einen Kontext ändern. Verwenden Sie auch nicht db.Entry(member).State = EntityState.Modified;, weil es Update-Anweisung für alle Eigenschaften generiert. Verwenden Sie stattdessen db.Entry(member).Property("PropertyName").IsModified = true;. Wenn context.Configuration.AutoDetectChangesEnabled == true, und Sie Daten aus Kontext abrufen, um zu ändern, müssen Sie keine von ihnen verwenden.

public void FunctionA(DbContext context, int openid) 
{ 
    var member = db.Members.Find(openid); 
    member.A=a; 
    db.Entry(member).Property("A").IsModified = true; 
} 

public void FunctionB(DbContext context, int openid) 
{ 
    var member = db.Members.Find(openid); 
    member.B=b; 
    db.Entry(member).Property("B").IsModified = true; 
} 

Dann werden beide dieser Methoden aufrufen und SaveChanges für einen Kontext, wie:

using (NielsenPMContext db = new NielsenPMContext()) 
{ 
    FunctionA(db, openid); 
    FunctionB(db, openid); 

    db.SaveChanges(); 
} 

Hinweis: Haben Sie keine Angst, mit Find Methode zweimal, weil Entity Framework aus lokalen Kontext bekommen anstelle der Datenbank nach dem ersten Mal. Oder es wird toll sein, Mitglied zu bekommen und es an FunctionA und FunctionB zu senden. Und ich glaube, dass Sie einen guten Grund haben, A und B Mitglieder in verschiedenen Methoden zu ändern.

+0

Ty, ich teste die 'db.Entry (member) .Property ("PropertyName"). IsModified = true;' , es funktioniert für mich, vielen Dank! – Nico

+0

@RuruXiang, Sie sind willkommen –

Verwandte Themen