ObjectContext.SaveChanges和Duplicate PRIMARY Key

时间:2011-03-06 16:00:42

标签: c# entity-framework c#-4.0 linq-to-entities

我有一个用PHP编写的宠物项目。我的代码所做的工作之一是加载一堆csv文件并将它们写入MySQL表,它们同时具有自动生成的主键和多部分唯一键。我无法控制,检查的方法是已处理的某个文件,因此唯一的密钥很方便。我将数据插入到INSERT IGNORE的表中,当我尝试插入已经存在的数据并且一切正常时,它会无声地失败。

现在,我正在尝试使用LINQ To Entities在C#4中创建类似的项目,但是当我尝试从已经在表中的文件中调用对象的ObjectContext.SaveChanges()方法时,UpdateException将被抛出{ {1}}作为内部异常。一种解决方案是将SqlClient.SqlException添加到索引中,它有点可行,但

  • 服务器上的更改而不是客户端
  • 使用现有索引
  • 进行更新时抛出OptimisticConcurrencyException

使用L2E完成那些不涉及数据库更改的插入是否有简单而优雅的方法?

1 个答案:

答案 0 :(得分:1)

另一个解决方案是这样的:

public void SaveAll( IEnumerable<Entity> entities )
{
    var ids = entities.Select(x => x.Id).ToList();
    var idsToRemove = context.Entities.Where(x => ids.Contains(x.Id)).Select(x => x.Id).ToList();
    var entitiesToInsert = entities.Where(x => !idsToRemove.Contains(x.Id));

    foreach(var entity in entitiesToInsert)
        context.Entities.AddObject(entity);
}