2016-08-10 8 views
8

私の状況はこのリンクとよく似ていますが、少なくとも私のコードは似ています。この同じメソッドを.NET Core構文に適用する方法を見つけようとしています。.NET CoreにDbContext Connection Stringを実装するにはどうすればよいですか?

Pass connection string to code-first DbContext

次のように私の具体的なコードは次のとおりです。

エラーCS1503引数1:マイクロソフト」から '文字列' から変換することはできませんが

public partial class CompanyFormsContext : DbContext 
{ 
    public CompanyFormsContext() 
     : base("name=CompanyFormsContext") 
    { 
    } 

    public CompanyFormsContext(string connName) 
     : base("name=" + connName) 
    { 
    } 
    ... 
} 

私はというエラーを取得します。 EntityFrameworkCore.DbContextOptions 'CompanyForms..NETCoreApp、Version = v1.0

私が base("name=CompanyFormsContext")または base("name=" = connName)のカッコを上書きすると、

と表示されます。

.NETコアでこの機能を実装する正しい方法は何ですか?

編集:(しかし、私はstartup.csの設定を持っていない)

"Data": { 
    "CompanyFormsContext": { 
     "ConnectionString": "Server=(localdb)\\projectsv13;Database=companyforms;Trusted_Connection=True;" 
    }, 
    "CompanyFormsContextQA": { 
     "ConnectionString": "Server=(localdb)\\projectsv13;Database=companyforms;Trusted_Connection=True;" 
    } 
    } 
:私は私のappsettings.jsonファイル内のデータベース接続のための以下の情報を持っていることを共有したいと思った

私はウェブサイトで次のリンクAdding DbContextOptions in Startup.cs not registering data storeを見つけました。私は単純なprotected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)が接続を修正するのに十分かどうか疑問に思っていますか?リンクから

services.AddEntityFramework(Configuration) 
    .AddSqlServer() 
    .AddDbContext<MyDbContext>(
     options => 
     options.UseSqlServer(Configuration.Get("Data:CompanyFormsContext:ConnectionString")) 
    ); 

は私Startup.csにおけるこの種のサービスが必要ですか?

+1

コンストラクタがDbContextOptionsオブジェクトを期待しているようですが、n文字列。 http://ef.readthedocs.io/en/latest/miscellaneous/configuring-dbcontext.html – SpykeBytes

+0

このリンクはさまざまな種類のDb接続を学習するのに本当に便利でしたが、私は今問題の内容をもっとよく知っています。ありがとうございました。 –

+0

ご迷惑をおかけしました。確かに正しい道に、私の答えが役立つかどうかを見てください。 – Peter

答えて

6

別のオプションがDbContextOptionsを取るベースのコンストラクタを呼び出すために、次のようになります。

public BooksContext(string connectionString) : this(GetOptions(connectionString)) 
{ 
} 

private static DbContextOptions GetOptions(string connectionString) 
{ 
    return SqlServerDbContextOptionsExtensions.UseSqlServer(new DbContextOptionsBuilder(), connectionString).Options; 
} 
8

一般的に、起動時にconfigから読み取ってから、接続文字列を使用して、プロセス用のEntity Framework DbContextサービスを構成します。

1)あなたappsettings.jsonに行を追加します。

"DbConnectionString": "Server=s;Database=db;Trusted_Connection=True;", 

2)(起動方法は、コンフィギュレーションを構築するために呼び出された後、あなたStartup.csクラスのラインを読む - ConfigureServicesにので、通常このような方法):

var connection = Configuration["DbConnectionString"]; 

3)エンティティフレームワークを使用している場合は(MyDbContextは、EFによって生成されたコンテキストクラスである)データベースコンテキストサービスを追加します。今)あなたはMyDbContext

4から抽出してきたばかりのインターフェイス(それはsimplistだ時)

services.AddDbContext<MyDbContext>(options => options.UseSqlServer(connection)); 
services.AddScoped<IMyDbContext, MyDbContext>(); 

IMyDbContextは次のとおりです。また、あなたのデータベースコンテキストをインスタンス化する方法を組み込みの依存性注入を伝えたいですあなたはMyDbContextを取るために、あなたのコントローラを定義することができますし、DIはそれを構築し、コントローラが呼び出されたときにそれを渡すの世話をします。

public MyController(IMyDbContext context) 
{ 
    _context = context // store for later use 
} 
1

IMOのベストプラクティス:

あなたconfiguration.jsonに追加します。

 "ConnectionStrings": { 
    "BooksContext": "Server=MyServer;Database=MyDb;Trusted_Connection=True;" 
    } 

にはセクションを初期化:

services.AddDbContext<BooksContext>(options => options.UseSqlServer(configuration.GetConnectionString(nameof(BooksContext)))); 
関連する問題