实体框架AddOrUpdate,密钥违规

时间:2015-04-21 08:31:29

标签: c# sql-server entity-framework

我正在使用来自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

0 个答案:

没有答案