Gibt es eine Möglichkeit festzustellen, ob ein LINQ-Objekt noch nicht in die Datenbank eingefügt wurde (neu) oder seit dem letzten Update geändert wurde (dirty)? Ich plane, meine Benutzeroberfläche an LINQ-Objekte zu binden (unter Verwendung von WPF) und benötige, dass es sich je nachdem, ob das Objekt bereits in der Datenbank ist oder nicht, anders verhält.
MyDataContext context = new MyDataContext();
MyObject obj;
if (new Random().NextDouble() > .5)
obj = new MyObject();
else
obj = context.MyObjects.First();
// Wie kann ich diese beiden Fälle unterscheiden?
Die einzige einfache Lösung, die mir einfällt, ist, den primären Schlüssel neuer Datensätze auf einen negativen Wert zu setzen (meine PKs sind ein Identitätsfeld und werden daher bei INSERT
auf eine positive Ganzzahl gesetzt). Dies funktioniert nur zur Erkennung neuer Datensätze. Es erfordert auch Identitäts-PKs und die Kontrolle über den Code, der das neue Objekt erstellt.
Gibt es einen besseren Weg, um dies zu tun? Es scheint, dass LINQ intern den Status dieser Objekte verfolgen muss, so dass es weiß, was bei context.SubmitChanges()
zu tun ist. Gibt es eine Möglichkeit, auf diesen "Objektstatus" zuzugreifen?
Klärung Offenbar war meine ursprüngliche Frage verwirrend. Ich suche nicht nach einer Möglichkeit, Datensätze einzufügen oder zu aktualisieren. Ich suche eine Möglichkeit, anhand eines beliebigen LINQ-Objekts festzustellen, ob dieses Objekt nicht eingefügt wurde (neu) oder seit dem letzten Update geändert wurde (dirty).