gpt4 book ai didi

c# - 如何在 EF Core 中使用 C# 9 记录?

转载 作者:行者123 更新时间:2023-12-04 11:04:54 32 4
gpt4 key购买 nike

我正在使用 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/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com