2016-12-07 9 views
1

.NET Framework 4.6.1でEntityFramework 6を​​実行しているDALをプロジェクトとして取得しました。他の.NET Frameworkプロジェクトのソリューションでうまく動作します。今度は、ASP.NET Core WebApi(.NET Framework 4.6.1を使用)を参照している同じDALプロジェクトを使用しますが、動作しません。例外:参照先の.NET Frameworkプロジェクトでappsettings.jsonから設定を取得する方法

アプリケーション設定ファイルに「MyEntities」という名前の接続文字列が見つかりませんでした。

.NET Coreプロジェクトはweb.configファイルを持たないため、EF6 Coreプロジェクトのappsettings.jsonから参照されているDALプロジェクトに設定を渡すにはどうすればよいですか?

私は、.NETコアプロジェクト(例えばhttps://docs.microsoft.com/en-us/aspnet/core/data/entity-framework-6など)の内部でEF6を使用するいくつかの例を見つけましたが、それは私を助けません。 dbcontextがDALプロジェクトの内部に作成されているからです。

appsettings.json

"ConnectionStrings": { 
    "MyEntities": "<my connectionString>" 
}, 

project.json

"dependencies": { 
    "EntityFramework": "6.1.3", 
    ... 
}, 
... 
"frameworks": { 
    "net461": { 
    "dependencies": { 
     "DAL": { 
     "target": "project" 
     } 
    }, 
    "imports": "dnxcore50" 
    } 
}, 

答えて

1

まあダルプロジェクトにそれを渡す必要があります。..私は私が望む答えを得られなかった。だから私は回避策を実行し、DALプロジェクトでいくつかのコードを変更する必要がありました。うまくいけば、それは他のプロジェクトのいくつかの機能を破ることはできませんでした。

DALプロジェクト:
私はモデルを最初にEFエンティティで作業していたので、モデルを変更できませんでした。しかし、部分クラスが作成されたので、MyEntityの別の部分クラスを作成し、パラメータを取るコンストラクタを作成しました。

namespace DAL.Models 
{ 
    public partial class MyEntities 
    { 
     public MyEntities(string connString) : base(connString) 
     { 
     } 
    } 
} 

DALリポジトリでは、パラメータ(私の.NETコアプロジェクトからの注入用)とプライベートメソッドを使用してコンストラクタを作成しました。

public class UserRepository : IUserRepository 
{ 
    private readonly string _dbContextString; 

    public UserRepository(string dbContextString) 
    { 
     _dbContextString = dbContextString; 
    } 

    private MyEntities GetMyEntities() 
    { 
     return string.IsNullOrEmpty(_dbContextString) ? new MyEntities() : new MyEntities(_dbContextString); 
    } 
    ... 
} 

そして、私は、検索を行なったし、私の.NETのコアプロジェクトで

using (var context = GetMyEntities()) 
    { 
     ... 

using (var context = new MyEntities()) 
    { 
     ... 

から、MyEntity()の使用のために置き換える:スタートアップで
。 cs ConfigureServiceに私のレポにconnectionStringを挿入する行を追加しました。

public void ConfigureServices(IServiceCollection services) 
{ 
    services.AddMvc(); 

    services.AddSingleton<IUserRepository>(new UserRepository(Configuration.GetConnectionString("MyEntities"))); 
    ... 

私は新しい.NETコアプロジェクトで動作し、他の.NETフレームワークプロジェクトでも動作します。

0

あなたが必要なコントローラでIConfigurationを注入し、

//dependency inject it in required controller or service class 
    IConfiguration Config 
//this will get your connection string 
    Config.GetSection("ConnectionStrings").GetSection("MyEntities") 
+0

私はこれを私のコントローラにどのように入れるのかは分かりません。 'Config'をどのように初期化すればよいのですか?これをDALプロジェクトに渡す方法は? –

+0

私は接続文字列をプロジェクトに渡すために使用できる[answer](http://stackoverflow.com/a/40902384)を見つけました。しかし、それは私のための解決策ではありません.DALは他のプロジェクトで使用されており、私はそれらからの呼び出しを処理する方法を変更することはできません。 私は私のappsettings.jsonを利用できるようにすることを願っています。ソリューションのネットプロジェクト。 –

+0

あなたのDALプロジェクトが静的なプロパティまたはコンストラクタのパラメータとして接続文字列を受け入れるようにし、DALプロジェクトを使用するプロジェクトから接続文字列を渡します。 – Sriram

関連する問題