我遇到了这个例外:
已添加具有相同键的项目。关键:p2072
这是在将实体添加到SaveChanges
后调用DbContext
。
奇怪的是它说“Key:p2072”,但它与我实体的任何键都不匹配。
主键配置如下:
modelBuilder.Entity<RequestEntity>().HasKey(e => new { e.Nif, e.Especialidad, e.Cuerpo });
其中:
string
int
Enum
您可以看到实体的完整定义。它如下:
public class RequestEntity
{
public string Nif { get; set; }
public Provincias Provincias { get; set; }
public Cuerpo Cuerpo { get; set; }
public int Especialidad { get; set; }
public Estado Estado { get; set; }
public Idiomas Idiomas { get; set; }
public int Orden { get; set; }
}
Provicias,Cuerpo,Idiomas和Estado是Enums 。请注意,与其他实体没有任何关系,只有原始类型。
我很难调试这个,因为要添加+23,000个实体,似乎没有任何重复。
此外,它显示的关键(p2072)毫无意义。密钥中唯一的字符串是Nif,但没有匹配的Nif。
这是堆栈跟踪:
在 System.ThrowHelper.ThrowAddingDuplicateWithKeyArgumentException(对象 密钥)在System.Collections.Generic.Dictionary
2.TryInsert(TKey key, TValue value, InsertionBehavior behavior) at System.Collections.Generic.Dictionary
2.添加(TKey密钥,TValue值)
在 Microsoft.EntityFrameworkCore.Update.ReaderModificationCommandBatch.CreateStoreCommand() 在 Microsoft.EntityFrameworkCore.Update.ReaderModificationCommandBatch.Execute(IRelationalConnection 连接) Microsoft.EntityFrameworkCore.Update.Internal.MySqlBatchExecutor.Execute(IEnumerable的1 commandBatches, IRelationalConnection connection) at Microsoft.EntityFrameworkCore.Storage.RelationalDatabase.SaveChanges(IReadOnlyList
1 条目) Microsoft.EntityFrameworkCore.ChangeTracking.Internal.StateManager.SaveChanges(IReadOnlyList`1 entriesToSave)at Microsoft.EntityFrameworkCore.ChangeTracking.Internal.StateManager.SaveChanges(布尔 acceptAllChangesOnSuccess)at Microsoft.EntityFrameworkCore.DbContext.SaveChanges(布尔 acceptAllChangesOnSuccess)at Microsoft.EntityFrameworkCore.DbContext.SaveChanges()at Plugin.Clm.Importer.Importer.SaveNewResults(ImportResult results)
在SaveChanges
之前,我已经把这一行:
var duplicates = requestEntities.GroupBy(e=>new{e.Nif, e.Especialidad, e.Cuerpo}).Select(x=>new{x.Key, Count = x.Count()})
.Where(x => x.Count > 1)
.ToList();
有趣的是duplicates
没有任何东西(0个元素)。发生了什么事?
答案 0 :(得分:0)
(代表问题作者发布)。
这恰好是我使用的Pomelo EF MySQL提供程序中的错误!更新到最新版本即可解决问题。