2010-10-13 3 views
5

Я пытаюсь получить функциональность SQL-сервера MERGE в Entity Framework.Синхронизация записей с использованием Entity Framework

В службе WCF я получаю список записей из клиентского приложения. Я хочу сравнить конкретное поле во ВСЕХ записях в списке с таблицей базы данных.

-У вас есть соответствующая запись в db, мне нужно обновить другие поля в записи db.

-Не должно быть никакого соответствия, мне нужно вставить всю запись.

-Если какие-либо записи в таблице db отсутствуют в списке, мне нужно удалить записи в db.

Вот код, с которым я борюсь до сих пор.

 


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

 

Мой вопрос: как вы изящно достигаете этого?

+0

Ваш код уже более элегантно, чем некоторые я использовал для достижения очень похожую вещь в последнее время. Я был бы доволен этим как есть, если у EF нет функции слияния, о которой никто из нас не знает? – Chris

+0

@ Крис: Спасибо. Я боялся, что кто-то скажет мне об этом. Я надеялся, что есть какая-то «хитрость», о которой я не знал. – 2010-10-15 09:56:18

ответ

1

Я бы воспользовался Sync Framework для этой задачи. Кажется, он идеально подходит для такого сценария.

Вы можете найти много информации по этому вопросу на MSDN

+0

Несмотря на то, что в моей ситуации мало перегиб, Synch Framework кажется лучшим решением. – 2010-10-15 09:58:06

+1

Я хочу сделать то же самое, но никогда не мог найти никакого примера, который бы четко продемонстрировал, как это сделать. Может кто-нибудь помочь? –

Смежные вопросы