LINQ To SQL-exception mit Attach(): Cannot add ein Unternehmen, das mit einem Schlüssel wird bereits verwendet
Betrachten Sie diese typischen disconnected Szenario:
- laden ein Customer-Objekt von SQL Server mithilfe von LINQ To SQL
- Benutzer änderungen der Entität und der präsentationsebene sendet wieder die Einheit geändert werden.
- die Daten-Schicht, mit L2S, müssen senden Sie die änderungen an SQL Server,
Betrachten Sie diese LINQ To SQL-Abfrage, deren Absicht ist, um eine Entität Customer.
Cust custOrig = db.Custs.SingleOrDefault(o => o.ID == c.ID); //get the original
db.Custs.Attach(c, custOrig); //we don't have a TimeStamp=True property
db.SubmitChanges();
DuplicateKeyException: Cannot add an entity with a key that is already in use.
Frage
- Wie vermeiden Sie diese Ausnahme?
- Was ist die beste Strategie für das aktualisieren einer Entität, die KEINE haben/wollen/brauchen eine timestamp-Eigenschaft?
Sub-Optimale Workarounds
- manuell einstellen, jede Eigenschaft, die in der Aktualisierung der Kunden an die orig Kunden.
- spin-up einen anderen DataContext
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies hat mit der Tatsache zu tun, dass datacontext (db) nicht verfolgen können, dieselbe Person mehr als einmal. Sehen dieser Beitrag für mehr details über, was Los ist.
Einer der obskuren Kommentare unten, die post sagt, es zu versuchen:
Lassen Sie mich wissen, wie es funktioniert für Sie, als die OP, die post sagt es funktionierte für ihn...
Anstatt einen neuen Kontext könnte man dies tun: