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

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

问题Here下了话题。

最佳答案

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

现在,您的Web应用程序仅需要引用您的业务/服务层,而不再直接依赖EntityFramework。

关于asp.net-core - 带有 Entity Framework 核心的数据层中来自appsettings.json的ConnectionString,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38356990/

10-12 05:49