作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 ASP.NET Core 5 Web API,我正在尝试使用新的 C# records作为我的模型类。但是,每当我使用 with
更新修改后的模型时,都会收到有关跟踪问题的 EF Core 错误。表达:
System.InvalidOperationException: The instance of entity type 'Product' cannot be
tracked because another instance with the key value '{ID: 2}' is already being
tracked. When attaching existing entities, ensure that only one entity instance
with a given key value is attached.
我相信这是由于“变异”记录如何创建新的对象实例而 EF Core 的跟踪系统不喜欢这样,但我不确定修复它的最佳方法。有人有什么建议吗?或者我应该回到使用常规类(class)而不是记录?
// Models/Product.cs
public record Product(int ID, string Name);
// Controllers/ProductController.cs
[HttpGet("test/{id}")]
public async Task<Product> ExampleControllerAction(int id, CancellationToken cancellationToken)
{
string newName = "test new name!!";
Product product = await db.Products.FindAsync(new object[] { id }, cancellationToken);
product = product with { Name = newName }; // Modify the model.
db.Update(product); // InvalidOperationException happens here.
await db.SaveChangesAsync(cancellationToken);
return product;
}
最佳答案
如果您关闭 EF 更改跟踪,它应该按书面方式工作。尝试添加 AsNoTracking()
到原始数据库调用。
关于c# - 如何在 EF Core 中使用 C# 9 记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67138040/
我是一名优秀的程序员,十分优秀!