asp.net DbContextOptionsBuilder.EnableSensitiveDataLogging不执行任何操作

xnifntxz  于 5个月前  发布在  .NET
关注(0)|答案(4)|浏览(70)

我试图在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
我错过了什么吗?

zyfwsgd6

zyfwsgd61#

我也遇到了同样的问题。通过使用DbContext本身中的OnConfiguring方法解决了它,而不是Startup中的ConfigureServices方法。

protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
    optionsBuilder.EnableSensitiveDataLogging();
}

字符串
此选项记录在此处。

i5desfxk

i5desfxk2#

有这个例外:
System.InvalidOperationException:无法跟踪实体类型“”的示例,因为已在跟踪具有相同键值的"“Id”}的另一个示例。附加现有实体时,请确保仅附加一个具有给定键值的实体示例。请考虑使用“DbContextOptionsBuilder.EnableSensitiveDataLogging”查看冲突键值。
在.NET 5中像这样启用options.EnableSensitiveDataLogging();后,

public void ConfigureServices(IServiceCollection services)
{
    services.AddDbContext<ApplicationDbContext>(options =>
    {
        options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection"));
        options.EnableSensitiveDataLogging();
    });

字符串
例外变成了这样:
System.InvalidOperationException:无法跟踪实体类型“”的示例,因为已在跟踪具有键值"{Id:5}“的另一个示例。附加现有实体时,请确保仅附加一个具有给定键值的实体示例。
这个错误原来是一个List<MyEntity>(),它包含了一个对我正在更新的值的引用。

oknrviil

oknrviil3#

我不认为这是启用它的方法。这应该可以

public void ConfigureServices(IServiceCollection services)
{
    services.AddDbContext<TodoContext>(opt =>
    {
        opt.EnableSensitiveDataLogging();
    });
}

字符串

ih99xse1

ih99xse14#

有时候问题出在现有的数据上。
请检查数据库中的相关表,并确认数据已经满足要添加的外键约束。
如果现有数据不满足约束,则数据库将无法添加约束。
如果您发现更新数据很费力,并且只是为了测试,那么您可以清除两个表中的所有记录。

相关问题