我有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:'实体类型的实例 '动物'无法跟踪,因为此类型的另一个实例 已经跟踪了相同的密钥。
答案 0 :(得分:1)
您使用的是哪个数据库?如果来自InMemoryDatabase
的{{1}}并且第一个动物添加了显式ID(Microsoft.EntityFrameworkCore.InMemory
),那么context.Animals.Add(new Animal { Id: 1, Name: "Cat" })
不会增加用于ID设置的内部身份计数器。因此,当您和第二只动物InMemoryDatabase
尝试将InMemoryDatabase
设置为Id
时,已经有1
的动物,因此抛出异常。
你有两个解决方案: