禁用EF核心迁移验证查询

时间:2018-11-15 15:41:54

标签: entity-framework-core azure-application-insights

我首先使用代码运行带有实体框架核心2.1.4的asp.net核心2.1.4 Web应用程序。迁移和种子在应用程序启动时完成。

我注意到几个EF查询正在检查每个呼叫的迁移历史记录:

Executed DbCommand (47ms) [Parameters=[], CommandType='Text', CommandTimeout='30'] SELECT OBJECT_ID(N'[__EFMigrationsHistory]');

Executed DbCommand (2ms) [Parameters=[], CommandType='Text', CommandTimeout='30'] SELECT OBJECT_ID(N'[__EFMigrationsHistory]');

Executed DbCommand (4ms) [Parameters=[], CommandType='Text', CommandTimeout='30'] SELECT [MigrationId], [ProductVersion] FROM [__EFMigrationsHistory] ORDER BY [MigrationId];

No migrations were applied. The database is already up to date.

我不想在每次通话时检查数据库。因此,我更改了ServiceLifetime.Singleton。但我仍然在每次通话中看到此验证查询。

services.AddDbContext<ApplicationDbContext>(options =>
{
    options.UseSqlServer(dbConnectionString,
        builder => builder.MigrationsAssembly(migrationsAssembly));
}, ServiceLifetime.Singleton, ServiceLifetime.Singleton);

EF6也有类似的问题:How to disable Migration Verification during every DbContext initialization

EF核心中不存在NullDatabaseInitializer。

建议做什么?这是正常行为吗?

1 个答案:

答案 0 :(得分:1)

我发现了问题: https://github.com/Microsoft/ApplicationInsights-aspnetcore/issues/778

使用“真实的” SQL事件探查器后,我发现它正在按预期工作,就像@ Ivan-Stoev所说的那样。我这边的请求以某种方式使用了相同的operation_id。因此,应用程序洞察力向我显示的痕迹和依赖关系实际上并不相关。

我通过删除默认的AI DependecyTracking修复了它。

private void RemoveDefaultAiDependencyTracking(IServiceCollection services)
{
    var serviceDescriptor = services.FirstOrDefault(descriptor => descriptor.ImplementationType == typeof(DependencyTrackingTelemetryModule));
    services.Remove(serviceDescriptor);
}

感谢您的时间,很抱歉浪费时间。.