我正在使用来自AddOrUpdate
的{{1}}方法,文档应该:
AddOrUpdate(IDbSet,TEntity [])
调用SaveChanges时,按键添加或更新实体。相当于数据库术语的“upsert”操作。这个方法很有用 使用迁移播种数据。
我想做一个“批量upsert”,我有一个触发器,每晚从另一个服务器提取数据并插入新值和更新现有。我正在使用的代码是:
EntityFramework 6.0
现在这段代码时不时地失败:
System.Data.Entity.Infrastructure.DbUpdateException:发生错误 在更新条目时。有关详细信息,请参阅内部异常---> System.Data.Entity.Core.UpdateException:发生错误 更新条目。有关详细信息,请参阅内部异常---> System.Data.SqlClient.SqlException:违反PRIMARY KEY 约束'PK_Configuration_ID'。无法插入重复键 对象'dbo.Configuration'。重复键值为(218383)。
从 private void InsertConfigurations(IEnumerable<Configuration> configs)
{
using (var context = new MyEntities())
{
using (var scope = new TransactionScope(TransactionScopeOption.Suppress))
{
context.Configuration.AutoDetectChangesEnabled = false;
context.Configurations.AddOrUpdate(configs.ToArray());
context.SaveChanges();
scope.Complete();
}
}
}
我理解的一点点来看,使用它的关键理由不应该是避免我遇到的确切问题吗?难道我做错了什么?
堆栈跟踪:
UPSERT