Я пытаюсь получить функциональность 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();
}
Мой вопрос: как вы изящно достигаете этого?
Ваш код уже более элегантно, чем некоторые я использовал для достижения очень похожую вещь в последнее время. Я был бы доволен этим как есть, если у EF нет функции слияния, о которой никто из нас не знает? – Chris
@ Крис: Спасибо. Я боялся, что кто-то скажет мне об этом. Я надеялся, что есть какая-то «хитрость», о которой я не знал. – 2010-10-15 09:56:18