我正在尝试在Entity Framework中获得SQL服务器MERGE语句的功能。在WCF服务中,我从客户端应用程序接收记录列表。我想要比较列表中所有记录的特定字段与数据库表中的记录。如果数据库中有匹配的记录,则需要更新数据库记录中的其他字段。如果没有匹配项,则需要插入整个记录。如果数据库表中有任何不在列表中的记录,则需要删除数据库中的记录。以下是我迄今为止苦苦挣扎的代码。
//从任何来源获取人员列表
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;
}
}
//============
//如何优雅地实现以下操作?
//delete from People where person.FirstName NOT in peopleList.FirstNames
//===========
ctx.SaveChanges();
}
我的问题是:如何优雅地实现这个操作?