【问题标题】:DbContextOptionsBuilder.EnableSensitiveDataLogging Doesn't Do AnythingDbContextOptionsBuilder.EnableSensitiveDataLogging 不做任何事情
【发布时间】:2019-01-24 19:40:51
【问题描述】:

我正在尝试在 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

我错过了什么吗?

【问题讨论】:

  • 首先是什么导致了异常——你如何重现它?如果不清楚问题是什么,那么关注没有解决问题的问题就没有多大意义了。
  • 这种情况下的问题是EnableSensitiveDataLogging没有效果。
  • 啊,我误解了“异常建议使用 ...”,因为它暗示这是一种实际解决导致异常的原因的方法,但它只是暗示作为一种获取更多细节的方法异常本身。你至少有一个堆栈跟踪吗? (无论您是否在某个地方获得该选项都应该与此选项无关;如果您没有堆栈跟踪,请为您的应用程序配置日志记录。)

标签: c# asp.net entity-framework


【解决方案1】:

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

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

此选项已记录在 here

【讨论】:

    【解决方案2】:

    我认为这不是启用它的方法。这应该工作

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

    【讨论】:

    • 试过这个选项,但对我不起作用。它仍然显示原始错误消息而没有其他信息。我只能通过@christian 的建议让它工作。
    【解决方案3】:

    遇到这个异常:

    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&lt;MyEntity&gt;(),其中包含对我正在更新的值的引用。

    【讨论】:

      猜你喜欢
      • 2020-10-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-15
      • 2017-12-31
      相关资源
      最近更新 更多