Ich versuche, die Funktionalität von SQL-Servern MERGE Anweisung in Entity Framework zu erhalten.Synchronize Records mit Entity Framework
Bei einem WCF-Dienst erhalte ich eine Liste mit Datensätzen von einer Client-App. Ich möchte ein bestimmtes Feld in allen Datensätzen in der Liste mit einer Datenbanktabelle vergleichen.
-Soll es einen passenden Datensatz in der Datenbank geben, muss ich die anderen Felder im DB-Datensatz aktualisieren.
- Sollte es keine Übereinstimmung geben, muss ich den gesamten Datensatz einfügen.
-Soll es Datensätze in der db-Tabelle geben, die nicht in der Liste sind, muss ich die Datensätze in der Datenbank löschen.
Hier ist der Code, mit dem ich bis jetzt kämpfe.
//List of people from whatever source
List peopleList = GetListOfPeopleFromClient();
using (var ctx = new PeopleEntities()) {
foreach (var person in peopleList) {
var dbPerson = ctx.People.FirstOrDefault(p => p.FirstName == person.FirstName);
if (dbPerson == null) {
dbPerson = new Person { FirstName = person.FirstName, LastName = person.LastName };
ctx.People.AddObject(dbPerson);
}
else {
dbPerson.LastName = person.LastName;
}
}
//============
//Yet to figure out how to do:
//delete from People where person.FirstName NOT in peopleList.FirstNames
//===========
ctx.SaveChanges();
}
Meine Frage ist: Wie erreichen Sie das elegant?
Der Code ist bereits eleganter als einige ich vor kurzem eine sehr ähnliche Sache zu erreichen verwendet. Ich wäre glücklich damit, wenn EF keine Merge-Funktion hat, von der wir beide nichts wissen. – Chris
@Chris: Danke. Ich hatte Angst, dass mir jemand das erzählen würde. Ich hatte gehofft, dass es einen 'linqish' Trick gab, von dem ich nichts wusste. –