使用Entity Framework同步记录

6
我正在尝试在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(); }

我的问题是:如何优雅地实现这个操作?


你的代码已经比我最近使用的一些代码更优雅,实现了非常相似的功能。如果 EF 有一个我们都不知道的合并函数,除此之外我会很满意它。 - Chris
@Chris:谢谢。我担心有人会告诉我那个答案。我希望有一些我不知道的“linqish”技巧。 - anon
1个回答

2
我会使用同步框架来完成这个任务。它似乎非常适合这种情况。
你可以在MSDN上找到大量相关信息。

虽然在我的情况下有点过度,但 Synch 框架似乎是最合适的解决方案。 - anon
1
我想要做完全相同的事情,但从来没有找到清楚演示如何实现它的例子。有人能帮忙吗? - Pit Ming
2
注意:Microsoft Sync Framework不支持Entity Framework。 - Dennis de Laat

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接