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

时间:2016-07-13 16:21:48

标签: asp.net-core asp.net-core-mvc entity-framework-core

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

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

Here问题摆脱了主题。

1 个答案:

答案 0 :(得分:9)

您可以轻松地将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;
        }
    }

}

启动:

using your.service.layer;

public void ConfigureServices(IServiceCollection services)
{
    var connectionString = Configuration.GetConnectionString("EntityFrameworkConnectionString");
    services.AddMyServiceDependencies(connectionString);
}

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