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