无法插入实体实体框架重复键异常

时间:2018-04-05 07:23:03

标签: c# asp.net entity-framework

我有Animal实体和Id作为Identity列的上下文。

这是动物定义:

public class Animal
{
    [Key, Column(Order = 0)]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int Id { get; set; }
    public string Name { get; set; }
}

收藏中只有一只动物:

Animals: [{
    Id: 1,
    Name: "Dog"
  }].

我想使用以下代码插入新动物:

context.Animals.Add(new Animal { Name: "Cat" })

抛出以下异常:

  

System.InvalidOperationException:'实体类型的实例   '动物'无法跟踪,因为此类型的另一个实例   已经跟踪了相同的密钥。

1 个答案:

答案 0 :(得分:1)

您使用的是哪个数据库?如果来自InMemoryDatabase的{​​{1}}并且第一个动物添加了显式ID(Microsoft.EntityFrameworkCore.InMemory),那么context.Animals.Add(new Animal { Id: 1, Name: "Cat" })不会增加用于ID设置的内部身份计数器。因此,当您和第二只动物InMemoryDatabase尝试将InMemoryDatabase设置为Id时,已经有1的动物,因此抛出异常。

你有两个解决方案:

  • 从第一只动物中删除了明确的ID(我更喜欢这个)
  • 在第二个(以及所有下一个动物)中明确设置id