在服务提供程序上调用了“AddEntityFramework*”,但在 DbContext 选项配置中未调用“UseInternalServiceProvider”

ygo*_*goe 13 c# npgsql entity-framework-core .net-core asp.net-core

我正在将 ASP.NET Core 应用程序从 Framework 2.2 升级到 3.1。它还使用实体框架核心。

在 Startup.ConfigureServices 方法中,有这样一段代码:

services.AddEntityFrameworkNpgsql()
    .AddDbContext<MainDbContext>(options => options
        .UseNpgsql(Configuration.GetConnectionString("MainDbContext")));
Run Code Online (Sandbox Code Playgroud)

.NET Core 2.2 一切正常。使用 .NET Core 3.1,我在每次应用程序启动时都会收到此警告:

在服务提供程序上调用了“AddEntityFramework*”,但在 DbContext 选项配置中未调用“UseInternalServiceProvider”。删除“AddEntityFramework*”调用,因为在大多数情况下它是不需要的,并且可能会导致与在同一服务提供商中注册的其他产品和服务发生冲突。

查找UseInternalServiceProvider方法,看起来应该在上调options用以传递主要服务提供者。不幸的是,此时服务提供者还不存在。它即将建成。

我不明白问题是什么以及这个警告想告诉我什么,但没能做到。我怎样才能让那个警告消失?网络还不知道这条消息。

Pan*_*vos 28

删除AddEntityFrameworkNpgsql。该文档解释说:

构建大多数应用程序时不再需要调用此方法,包括那些在 ASP.NET 或其他地方使用依赖注入的应用程序。仅在构建用于该方法的内部服务提供者时才需要。除了一些高级场景外,不建议这样做。

Npgsql的实际入门页面显示不需要任何额外的东西:

只需将以下内容放在 Startup.cs 的 ConfigureServices 方法中:

public void ConfigureServices(IServiceCollection services)
{
    // Other DI initializations

    services.AddDbContext<BloggingContext>(options =>
            options.UseNpgsql(Configuration.GetConnectionString("BloggingContext")));
}
Run Code Online (Sandbox Code Playgroud)