Entity FrameworkコアのApp.configまたはWebConfig.configから接続文字列を読み込むにはどうすればよいですか

entity-framework entity-framework-6 entity-framework-core

質問

古いバージョンでは、DbContextコンストラクタで直接接続文字列を与えることができます。

EF v6の例:App.configの私の接続文字列を以下に示します。

  <connectionStrings>
    <add name="DatabaseConnecionString"
    connectionString="Data Source=.;Initial Catalog=db;Integrated Security=true"
    providerName="System.Data.SqlClient"/>
  </connectionStrings> 

var myDbContext = MyDbContext("name=DatabaseConnecionString");

私がEF 7 / Coreで同じことをすると、エラーが出るのですか?

受け入れられた回答

Entity Framework 7 / Coreでは、過去と同じように接続文字列名をDbContextベースのコンストラクタに渡すことはできませんが、問題の別の解決方法があります。

解決策I:

var optionsBuilder = new Microsoft.EntityFrameworkCore.DbContextOptionsBuilder();
var connectionString = ConfigurationManager.ConnectionStrings["DatabaseConnecionString"].ConnectionString;
optionsBuilder.UseSqlServer(connectionString);
 using (var dbContext = new DatabaseContext(optionsBuilder.Options))
 {
    dbContext.Users.Add(new User() { Name = "Bassam" });
    dbContext.SaveChanges();
 }

ソリューションII:

データベース移行に提供された接続文字列を使用する場合は、DbContextに読み込みを配置する必要があります。

public class DatabaseContext : DbContext
{
    public DbSet<User> Users { get; set; }

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
      var connectionString = ConfigurationManager.ConnectionStrings["DatabaseConnecionString"].ConnectionString;
      optionsBuilder.UseSqlServer(connectionString);
    }

    public DatabaseContext()
    {
    }

    public DatabaseContext(DbContextOptions s)
    : base(s)
    {
    }
}

App.configがアセンブリ(dll / exe)にない場合、スタートアッププロジェクトにデータ移行コマンドAdd-Migration / Update-Migrationを与える必要があります。



Related

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