Wie würde Sie schreiben ein Upsert für LINQ to SQL?
Also ich möchte schreiben eine generische Upsert-Funktion für LINQ to SQL und ich habe einige Schwierigkeiten, die Konzeptualisierung, wie es zu tun. Ich möchte es für die Arbeit, so etwas wie dieses:
var db = new DataContext();
db.Customers.UpsertOnSubmit(customer);
So müsste es allgemein in gewisser Weise, und ich denke und extension-Methode auf die Tabelle. Ich habe in der Lage, so weit zu kommen bei der Bestimmung der Primärschlüssel der zugrunde liegenden Tabelle:
var context = source.Context;
var table = context.Mapping.GetTable(source.GetType());
var primaryMember = table.RowType.DataMembers.SingleOrDefault(m => m.IsPrimaryKey);
Ich gehe davon aus, dass es notwendig sein wird, um diese zu verfassen, eine Abfrage zu sagen, wenn der Artikel ist in der DB bereits oder nicht, aber ich weiß wirklich nicht, was zu tun an diesem Punkt.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich tun etwas ähnliches, aber mit einem anderen Ansatz. Jede Entität implementiert
IEntity
. Eine der Eigenschaften derIEntity
ist ein Zustand, wenn das Objekt neu ist oder bereits vorhanden ist. Ich habe dann implementieren, dass für jede Entität, wie:Dann eine generische
Upsert
werden könnte (auf einem generischen repository-Typ-Klasse):Wenn Ihr das anbringen von anderen datacontext, auch stellen Sie sicher, dass Sie einen Zeitstempel auf Ihre Objekte.
MERGE
wie hier beschrieben: stackoverflow.com/questions/2479488/... .Kurze Antwort:
Schnappen Sie sich diese: EntityExtensionMethods.cs
Erklärung
Tun UPSERT in LINQ-to-SQL ohne Abfrage zuerst die Datensätze, die Sie tun können, die folgenden. Es wird noch treffen, die db einmal zu überprüfen, ob Datensatz vorhanden, aber nicht ziehen Sie die Aufzeichnung:
Erweiterung Methode
Ich kam mit der folgenden extension Methode für Sie.
Verwenden Sie es wie unten:
Ich oben Hinzugefügt-Erweiterung-Methode mit mehr Material zu diesem gist: EntityExtensionMethods.cs