2010-10-13 4 views
5

J'essaie d'obtenir la fonctionnalité de l'instruction MERGE des serveurs SQL dans Entity Framework.Synchroniser les enregistrements à l'aide d'Entity Framework

Lors d'un service WCF, je reçois une liste d'enregistrements d'une application cliente. Je souhaite comparer un champ particulier dans TOUS les enregistrements de la liste avec une table de base de données. -Si il existe un enregistrement correspondant dans la base de données, je dois mettre à jour les autres champs de l'enregistrement DB.

-S'il n'y a pas de correspondance, j'ai besoin d'insérer l'ensemble du dossier.

-S'il y a des enregistrements dans la table db qui ne sont pas dans la liste, j'ai besoin de supprimer les enregistrements dans la base de données.

Voici le code avec lequel je me bats jusqu'à présent.

 


      //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(); 
      } 

 

Ma question est: comment faites-vous élégamment cela? Je voudrais faire usage de Sync Framework pour cette tâche.

+0

Votre code est déjà plus élégant que certains je l'ai utilisé pour réaliser une chose très similaire récemment. Je serais heureux avec ça en l'état, à moins qu'EF ait une fonction de fusionage dont aucun de nous ne soit au courant? – Chris

+0

@Chris: Merci. J'avais peur que quelqu'un me dise ça. J'espérais qu'il y avait un truc «linqish» que je ne connaissais pas. –

Répondre

1

Cela semble parfaitement adapté à ce genre de scénario.

Vous pouvez trouver beaucoup d'informations sur le sujet sur MSDN

+0

Bien que ce soit un peu exagéré dans ma situation, le Synch Framework semble être la solution la mieux adaptée. –

+1

Je veux faire exactement la même chose mais je n'ai jamais pu trouver d'exemple qui montre clairement comment le faire. Quelqu'un peut-il aider? –

Questions connexes