Entity Frameworkコアを持つデータ層のappsettings.jsonからのConnectionString

asp.net-core asp.net-core-mvc entity-framework-core

質問

Entity Frameworkコアを使用してASP.NETコアに構築している新しいアプリケーションがあります。アプリケーションには、UI、モデル、ビジネス、およびデータ層があります。以前のバージョンのASP.NETでは、web.configに接続文字列を設定することができ、既定では参照された層で使用できるようになりました。これは、appsettings.json(または他の設定オプション)を使用してASP.NETコアで同じケースではないようですか?これがどのように成し遂げられたのか?データ層にdbcontextを設定しましたが、現在接続文字列をハードコーディングしています。

私が見てきたすべての例は、startup.csのUIレイヤーにdbcontextが設定されています。これは私が避けようとしていることです。

質問はここで話題になりました。

受け入れられた回答

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に直接依存しません。



Related

ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ