【发布时间】:2010-10-13 23:28:06
【问题描述】:
我正在尝试在实体框架中获取 SQL 服务器 MERGE 语句的功能。
在 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:谢谢。我害怕有人会告诉我这些。我希望有一些我不知道的“linqish”技巧。
标签: c# sql-server entity-framework