请问下EF Core在修改数据的时候提示:
An unhandled exception occurred while processing the request.
Add
Startup代码如下:
services.AddEntityFrameworkSqlServer().AddDbContext<Repositories.Context.Content>(bulider =>
{
bulider.UseSqlServer("server=.;database=yy;uid=sa;password=123456", options =>
{
});
}, ServiceLifetime.Scoped);
实现代码如下:
public async Task ModifyAsync(TAggregateRoot root)
{
DbSet.Update(root).State = EntityState.Modified;
await DbContext.SaveChangesAsync();
}
DbContext是通过构造注入来的:
public BaseRepository(YYCMSContent dbcontext)
{
DbContext = dbcontext;
}
搞了好久了,希望老司机带下。
1.上下文没管理好
2.你封装了ef.手动去修改追踪状态
建议提供更多一些的代码
我刚才尝试了下不让它跟踪数据,就可以了。
但是我觉得ServiceLifetime.Scoped这个指定没有起作用。
@大壮他哥: 出现这个问题恰恰说明ServiceLifetime.Scoped起作用了
@dudu: 不解,麻烦说一下。
@大壮他哥:
对于同一个DbContext实例,同一个类型、同一个Key的实体的实例,只能被跟踪一次。
使用ServiceLifetime.Scoped,对于同一个http请求,会共享同一个DbContext实例。
我的猜测:你遇到这个问题,是由于处理当前http请求的代码中,出现了2个key相同的WebInfomation实例,当对第2个WebInfomation实例,进行 DbSet.Update(root).State = EntityState.Modified; 操作时,就触发了"The instance of entity type 'WebInfomation' cannot be tracked because another instance of this type with the same key is already being tracked." 异常。
@dudu: 谢谢,应该是这个问题。