【发布时间】:2021-04-20 16:31:09
【问题描述】:
我正在通过依赖注入访问我的数据库实例,它的作用域是请求。
这是我startup.cs的代码:
public void ConfigureServices(IServiceCollection services)
{
services.AddDbContext<AppDbContext>(options =>
{
options.UseSqlServer(Configuration.GetConnectionString("ApiEntity"));
options.EnableSensitiveDataLogging(true);
});
services.AddRazorPages();
}
在我的index.cshtml.cs 文件中,我有一个我想要更新的项目列表。我将它们绑定到 PageModel,如下所示:
[BindProperty]
public List<Project> Projects { get; set; }
当使用更新的实体调用 OnPost 方法并且我运行 _context.SaveChanges(); 时,跟踪的实体不会得到更新。
当我首先尝试通过调用更新实体时:_context.UpdateRange(Projects); 我收到以下错误:
InvalidOperationException:无法跟踪实体类型“Project”的实例,因为已经在跟踪另一个具有与 {'ProjectId'} 键值相同的实例。附加现有实体时,请确保仅附加一个具有给定键值的实体实例。考虑使用“DbContextOptionsBuilder.EnableSensitiveDataLogging”来查看冲突的键值
我查看了此错误消息的其他示例,解决方案似乎是scope your repository(我已经是)或detach your entity and then reattach it,但我不确定为什么要添加这种额外的复杂性。我应该能够通过简单地调用_context.saveChanges 来更新正在跟踪的实体。这可能吗 ?如果是这样,我做错了什么?
【问题讨论】:
-
我们需要您的代码来处理 POST 并进行更新
标签: .net asp.net-core entity-framework-core