来自实体框架核心的数据层中的appsettings.json的ConnectionString

Sol*_*fer 4 entity-framework-core asp.net-core-mvc asp.net-core

我有一个新的应用程序,我正在使用Entity Framework Core构建ASP.NET Core.该应用程序具有UI,模型,业务和数据层.在以前的ASP.NET版本中,您可以在web.config中设置连接字符串,默认情况下它将在引用的层中可用.在使用appsettings.json(或其他配置选项)的ASP.NET Core中,这似乎不是相同的情况?有关如何实现这一点的任何想法?我在数据层中配置了dbcontext,但我目前正在对连接字符串进行硬编码.

我看到的所有示例都在startup.cs的UI层中配置了dbcontext.这就是我想要避免的.

问题在这里下了主题.

Joe*_*tte 10

您可以轻松地将IServiceCollection的扩展方法添加到业务/服务层,并使用它来注册自己的依赖项.然后在启动时,您只需在服务层上调用该方法,而无需在Web应用程序中引用EntityFramework.

using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.DependencyInjection.Extensions;

namespace your.service.layer
{
    public static class MyServiceCollectionExtensions
    {
        public static IServiceCollection AddMyServiceDependencies(this IServiceCollection services, string connectionString)
        {
             services.AddEntityFrameworkSqlServer()
            .AddDbContext<YourDbContext>((serviceProvider, options) =>
            options.UseSqlServer(connectionString)
                   .UseInternalServiceProvider(serviceProvider)
                   );
             return services;
        }
    }

}
Run Code Online (Sandbox Code Playgroud)

启动:

using your.service.layer;

public void ConfigureServices(IServiceCollection services)
{
    var connectionString = Configuration.GetConnectionString("EntityFrameworkConnectionString");
    services.AddMyServiceDependencies(connectionString);
}
Run Code Online (Sandbox Code Playgroud)

现在,您的网络应用仅需要对您的业务/服务层的引用,并且它不直接依赖于EntityFramework.