如何從Entity Framework Core中的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();
 }

解決方案二:

如果要使用提供的連接字符串進行數據庫遷移,則必須將加載放入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合法嗎? 是的,了解原因