我试图在ASP.NET Core项目中查找实体框架InvalidOperationException
的原因。异常建议使用DbContextOptionsBuilder.EnableSensitiveDataLogging
。
在我的Startup.cs中,我有:
public void ConfigureServices(IServiceCollection services)
{
services.AddDbContext<TodoContext>(opt =>
{
opt.UseInMemoryDatabase("TodoList");
opt.EnableSensitiveDataLogging();
});
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
}
字符串
问题是它似乎什么也没做,我得到的异常消息完全一样,仍然建议使用DbContextOptionsBuilder.EnableSensitiveDataLogging
。
我错过了什么吗?
4条答案
按热度按时间zyfwsgd61#
我也遇到了同样的问题。通过使用
DbContext
本身中的OnConfiguring
方法解决了它,而不是Startup
中的ConfigureServices
方法。字符串
此选项记录在此处。
i5desfxk2#
有这个例外:
System.InvalidOperationException:无法跟踪实体类型“”的示例,因为已在跟踪具有相同键值的"“Id”}的另一个示例。附加现有实体时,请确保仅附加一个具有给定键值的实体示例。请考虑使用“DbContextOptionsBuilder.EnableSensitiveDataLogging”查看冲突键值。
在.NET 5中像这样启用
options.EnableSensitiveDataLogging();
后,字符串
例外变成了这样:
System.InvalidOperationException:无法跟踪实体类型“”的示例,因为已在跟踪具有键值"{Id:5}“的另一个示例。附加现有实体时,请确保仅附加一个具有给定键值的实体示例。
这个错误原来是一个
List<MyEntity>()
,它包含了一个对我正在更新的值的引用。oknrviil3#
我不认为这是启用它的方法。这应该可以
字符串
ih99xse14#
有时候问题出在现有的数据上。
请检查数据库中的相关表,并确认数据已经满足要添加的外键约束。
如果现有数据不满足约束,则数据库将无法添加约束。
如果您发现更新数据很费力,并且只是为了测试,那么您可以清除两个表中的所有记录。