我有一个用PHP编写的宠物项目。我的代码所做的工作之一是加载一堆csv文件并将它们写入MySQL表,它们同时具有自动生成的主键和多部分唯一键。我无法控制,检查的方法是已处理的某个文件,因此唯一的密钥很方便。我将数据插入到INSERT IGNORE
的表中,当我尝试插入已经存在的数据并且一切正常时,它会无声地失败。
现在,我正在尝试使用LINQ To Entities在C#4中创建类似的项目,但是当我尝试从已经在表中的文件中调用对象的ObjectContext.SaveChanges()
方法时,UpdateException
将被抛出{ {1}}作为内部异常。一种解决方案是将SqlClient.SqlException
添加到索引中,它有点可行,但
使用L2E完成那些不涉及数据库更改的插入是否有简单而优雅的方法?
答案 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);
}