gpt4 book ai didi

c# - ObjectContext.SaveChanges 和重复的主键

转载 作者:行者123 更新时间:2023-11-30 18:05:48 26 4
gpt4 key购买 nike

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

现在,我正在尝试使用 LINQ To Entities 在 C# 4 中创建类似的项目,但是当我尝试为表中已存在的文件中的对象调用 ObjectContext.SaveChanges() 方法时,UpdateException 作为内部异常与 SqlClient.SqlException 一起抛出。一种解决方案是将 Ignore Duplicate Keys = Yes 添加到索引中,它有点管用,但是

  • 它是在服务器上而不是在客户端上更改的
  • 更新现有索引时抛出 OptimisticConcurrencyException

有没有简单优雅的方法来完成那些不涉及数据库更改的 L2E 插入???

最佳答案

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

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);
}

关于c# - ObjectContext.SaveChanges 和重复的主键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5211573/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com