如何从 Entity Framework 核心中的 App.config 或 WebConfig.config 加载连接字符串
How can I load the connection string from App.config or WebConfig.config in 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 基础构造函数,但有另一种解决方法。
解决方案一:
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.
在旧版本中,我可以直接在 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 基础构造函数,但有另一种解决方法。
解决方案一:
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.