2012-04-13 5 views
0

Ich wollte nur wissen, was die beste Vorgehensweise beim Aktualisieren von Entitäten mit linq2sql ist?Was ist die beste Vorgehensweise zum Aktualisieren von Entitäten in Linq2SQL?

Ein bisschen mehr Details, um die Frage besser zu verstehen.

Wie ich aus den Artikeln verstehe, kann ich 2 Situationen haben: Entität ist an den Kontext und Entität von Grund auf (oder von bestehenden Entität) erstellt. Ich wollte nur eine Methode haben entites zu aktualisieren, dass jetzt in der folgenden Art und Weise implementiert ist:

public virtual void Save<T>(T value) where T : class 
{ 
     Context.GetTable<T>().Attach(value); 
     Context.Refresh(RefreshMode.KeepCurrentValues, value); 
     Context.SubmitChanges(); 
} 

Natürlich, wenn ich den Code ausführen:

var orders = GenericRepository.Instance.Find<BuyerOrder>(b => b.ID == 2).FirstOrDefault(); 
orders.Price = 397809; 
GenericRepository.Instance.Save(orders); 

das Objekt bereits auf dem beigefügten Kontext und ich bekam eine Ausnahme:

Cannot attach an entity that already exists. 

Sollte ich immer Objekte lösen vor dem Speichern? Gibt es eine andere Möglichkeit, dieses Problem zu lösen?

Sorry, wenn die Frage dumm ist - dies ist meine ersten Erfahrungen mit linq2sql

Antwort

1

In Ihrer Save Methode kann die Tabelle nicht anhänge. Es muss auch keinen Typ annehmen, Sie können einfach Context.SubmitChanges innerhalb Ihrer Save-Methode aufrufen. Etwas wie:

public void Save() 
{ 
    Context.SubmitChanges(); 
} 

Dann tun:

var orders = GenericRepository.Instance.Find<BuyerOrder>(b => b.ID == 2).FirstOrDefault(); 
orders.Price = 397809; 
GenericRepository.Instance.Save(); 

Siehe MSDN für einige weitere Beispiele: http://msdn.microsoft.com/en-us/library/bb386931.aspx

+1

Diese ist die richtige Antwort. Entferne niemals deine Einheit und spiele keine Tricks. Speichern Sie keine einzelnen Entitäten. Nehmen Sie Änderungen an Ihrem Objektdiagramm als Ganzes vor und rufen Sie am Ende SaveChanges auf. – usr

+0

danke für die Antwort. Aber wie kann ich definieren, dass die Entität an den Kontext gebunden ist? Ich möchte 2 Situation in 1 Methode behandeln: Wenn die Entität an den Kontext angefügt ist und wenn es nicht –

+0

Sie können definieren, ob eine Entität mithilfe der Antwort in dieser Frage angefügt ist: http://stackoverflow.com/questions/6493737/how-do-i-check-ob-ein-linq-to-sql-Objekt-ist-bereits-angefügt-zu-einem-Datenkontext – mattytommo

1

können Sie prüfen, ob das Unternehmen wie folgt angebracht:

if (!Context.GetTable<T>().IsAttached(value)) 
{ 
    Context.GetTable<T>().Attach(value); 
} 
Context.Refresh(RefreshMode.KeepCurrentValues, value); 
Context.SubmitChanges(); 
+0

Sorry, vielleicht habe ich smth missverstanden. Ich sehe nicht die Methode Context IsAttched. –

Verwandte Themen