如何强制迁移使用客户端上下文的连接字符串触发迁移
How to force the migration to use connection string of the client context triggered the migration
应用程序使用 EF 6.1.2 连接到数据库。数据库由应用程序使用 EF 迁移功能自动升级。
但是,迁移会调用无参数构造函数,而不是使用触发迁移的客户端上下文所使用的连接字符串。如何强制迁移(在 var z = await y.ToListAsync();
行触发)使用提供给 clientContext
?
的连接字符串
客户端上下文的连接字符串由用户提供(即它在 app.config 和任何其他名称下均不可用)。
代码
Database.SetInitializer(new MigrateDatabaseToLatestVersion<ClientContext, Configuration>());
var clientContext = new ClientContext(connectionString);
var y = clientContext.Set<TEntity>();
var z = await y.ToListAsync();
配置class
public sealed class Configuration : DbMigrationsConfiguration<ClientContext>
{
public Configuration()
{
AutomaticMigrationsEnabled = false;
}
}
ClientContextclass
public class ClientContext : DbContext
{
public ClientContext()
: this(Properties.Settings.Default.OnlineConnectionString)
{
}
public ClientContext(string connectionString) : base(connectionString)
{
}
}
在您的数据库配置中设置 TargetDatabase class;
public sealed class SomeConfiguration : DbMigrationsConfiguration<SomeDbContext>
{
public Configuration()
{
//Creates a new instance of DbConnectionInfo based on a connection string.
TargetDatabase = new DbConnectionInfo(
connectionString:"The connection string to use for the connection",
providerInvariantName:"The name of the provider to use for the connection. Use 'System.Data.SqlClient' for SQL Server.");
}
}
将 true 传递给构造函数(将 true 传递给构造函数表示迁移应该重用触发迁移的客户端上下文)。无需手动向初始化程序提供连接字符串。
Database.SetInitializer(new MigrateDatabaseToLatestVersion<ClientContext, Configuration>(true));
应用程序使用 EF 6.1.2 连接到数据库。数据库由应用程序使用 EF 迁移功能自动升级。
但是,迁移会调用无参数构造函数,而不是使用触发迁移的客户端上下文所使用的连接字符串。如何强制迁移(在 var z = await y.ToListAsync();
行触发)使用提供给 clientContext
?
客户端上下文的连接字符串由用户提供(即它在 app.config 和任何其他名称下均不可用)。
代码
Database.SetInitializer(new MigrateDatabaseToLatestVersion<ClientContext, Configuration>());
var clientContext = new ClientContext(connectionString);
var y = clientContext.Set<TEntity>();
var z = await y.ToListAsync();
配置class
public sealed class Configuration : DbMigrationsConfiguration<ClientContext>
{
public Configuration()
{
AutomaticMigrationsEnabled = false;
}
}
ClientContextclass
public class ClientContext : DbContext
{
public ClientContext()
: this(Properties.Settings.Default.OnlineConnectionString)
{
}
public ClientContext(string connectionString) : base(connectionString)
{
}
}
在您的数据库配置中设置 TargetDatabase class;
public sealed class SomeConfiguration : DbMigrationsConfiguration<SomeDbContext>
{
public Configuration()
{
//Creates a new instance of DbConnectionInfo based on a connection string.
TargetDatabase = new DbConnectionInfo(
connectionString:"The connection string to use for the connection",
providerInvariantName:"The name of the provider to use for the connection. Use 'System.Data.SqlClient' for SQL Server.");
}
}
将 true 传递给构造函数(将 true 传递给构造函数表示迁移应该重用触发迁移的客户端上下文)。无需手动向初始化程序提供连接字符串。
Database.SetInitializer(new MigrateDatabaseToLatestVersion<ClientContext, Configuration>(true));