2010-10-13 12 views
5

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?

+0

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

+0

@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. –

Antwort

1

Ich würde das Sync-Framework für diese Aufgabe verwenden. Es scheint perfekt für dieses Szenario geeignet zu sein.

Sie auf eine Vielzahl von Informationen zu diesem Thema finden MSDN

+0

Obwohl ein wenig Overkill in meiner Situation, scheint das Synch Framework die beste Lösung zu sein. –

+1

Ich möchte genau das gleiche machen, aber ich konnte nie irgendein Beispiel finden, das deutlich zeigt, wie es geht. Kann jemand helfen? –