2016-05-19 4 views
2

移行を生成するために使用するDataProvider(SQL Server)とConnectionStringを指定する方法(Add-Migration)データベース(更新データベース)?データプロバイダーの選択と接続文字列のロードをDbContext(.UseSqlServer())にハードコードする必要はありません。Entity Framework 7 - 移行:移行のためだけにデータベースプロバイダと接続文字列を指定する方法

私はEF6がweb.configから直接接続文字列を選ぶことができると思いますが、EF7には何か類似していますか?

答えて

1

んが、あなたはoptionsBuilder使用する必要がありません:

例:

string oldConnectionString [email protected]"Server = .\;Initial Catalog=EFTutorial; AttachDbFilename=|DataDirectory|\EFTutorial.mdf; Trusted_Connection = True; MultipleActiveResultSets = true"; 

protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) 
{ 
    optionsBuilder.UseSqlServer(oldConnectionString); 
    base.OnConfiguring(optionsBuilder); 
} 

あなたはまた、JSONとしてロードし、app.configファイルまたはweb.configファイルから直接読み込むことができます。

は、.NETのコアを使用している場合:

を次のようにあなたのappsettings.jsonにconenction文字列を定義することができます。アプリの

{ 
    { 
    .... 

    }, 
    "Data": { 
      "ConnectionString": "..." 
    } 
} 

をあなたはそれをロードする必要が開始:

// Set up configuration sources. 
var builder = new ConfigurationBuilder().AddJsonFile("appsettings.json"); 
builder.AddEnvironmentVariables(); 
Configuration = builder.Build().ReloadOnChanged("appsettings.json"); 

その後、Startup.csでEntity Frameworkも構成する必要があります。

public void ConfigureServices(IServiceCollection services) 
{ 
    ... 
    services.AddEntityFramework() 
      .AddSqlServer() 
      .AddDbContext<AppContext>(options => 
{ 
        options.UseSqlServer(Configuration "Data:ConnectionString"]); }); 
     services.AddScoped<AppContext, AppContext>(); 

     ... 
    } 
} 

ここimprotantもの:Entity Frameworkのコア1.0/7でconenction文字列へ

services.AddScoped((_) => new AppContext(Configuration["Data:DefaultConnection:ConnectionString"])); 

https://docs.asp.net/en/latest/data/entity-framework-6.html

例: https://docs.asp.net/en/latest/fundamentals/configuration.html

(あなたがそれを行うことができます古い方法また、EF Coreを使用して)、App.configまたはweb.configからconenctionStringをロードしました。 MigrationプロセスAdd-Migration/Update-Databaseによって、EFはConnection文字列を自動的に検出します。 しかし、パラメータとしてNuGetコマンドラインのAdd-MigrationにConenction文字列を指定することもできます。

私はこれがあなたの問題を解決することを願っています!

+0

これはあまり良いアプローチではありませんか、何か不足していますか?エンティティとDbContextのクラスライブラリがあるとします。このクラスライブラリプロジェクトの移行を有効にする必要があります。ハードコードのdatabsaeプロバイダーの選択と接続文字列は、たとえば私たちにInMemoryや異なるデータベースプロバイダー/接続文字列を後でプロダクションコードに伝えたい場合などには適していません。 –

+0

これは仕事であることを示すための一例に過ぎません。あなたの議論の文字列をハードコードする必要はありません。これは良い考えではありません。私は私の答えを更新し、私は通常のapporachを追加します。 –

+0

"Add-Migration"に接続文字列を提供できるかどうかわかりませんでした。とにかくありがとうございました。問題が解決しました。 –

関連する問題