在具有种子实体的表中添加数据后出现重复键错误
Posted
技术标签:
【中文标题】在具有种子实体的表中添加数据后出现重复键错误【英文标题】:Duplicate key error after adding data in a table with seeded entities 【发布时间】:2021-10-09 14:14:08 【问题描述】:情况如下:我正在使用 .NET 5 和 Entity Framework。我有一个播种机,看起来像这样:
public static void Seed(this ModelBuilder modelBuilder)
Entity[] entities = new Entity[]
new Entity
Id = 1,
Description = "Test description 1"
,
new Entity
Id = 1,
Description = "Test description 1"
我的实体如下,没什么特别的:
public class Entity
[Key]
public ins Id get; set;
public string Name get; set;
public string Description get; set;
public IList<AnotherEntity> AnotherEntity get; set; = new List<AnotherEntity>();
我想向数据库中添加另一个实体(我正在使用 mysql),而不是直接从数据库中,而是使用 EF,但是当我尝试这样做时(调用 .SaveChanges()),我收到一条错误消息,指出那里是PK中的重复,因为EF不理解这个表里已经有数据了。
我可以处理此问题的最佳方法是什么?
谢谢!
【问题讨论】:
你能发布你的表定义和模型构建器的相关部分来配置Entity
吗?我认为这可能有助于缩小问题范围
@YoannaKostova 在实体模型(代码优先)或 SQL Mgmt Studio(数据库优先)中将 Microsoft Identity 添加到您的 PK 字段中
@GarethD 实体非常简单,问题不在于该属性的关系,而更多来自EF没有捕捉到已经存在种子数据并从1开始计数的事实,从那里出现问题。这是我得到的错误:MySqlConnector.MySqlException (0x80004005): Duplicate entry '2' for key 'entity.PRIMARY'。
【参考方案1】:
我发现如果在 OnModelCreating 方法中添加:
protected override void OnModelCreating(ModelBuilder builder)
builder.Entity<MyEntity>().Property(b => b.Id).ValueGeneratedOnAdd();
数据库设法了解已经存在种子数据并生成不重复的 Id。
【讨论】:
以上是关于在具有种子实体的表中添加数据后出现重复键错误的主要内容,如果未能解决你的问题,请参考以下文章
sql server 2000 列添加identity标识 出现错误时,弹出警告,清除警告后再次输入数据,标识会丢失一个