如何强制迁移使用客户端上下文的连接字符串触发迁移

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));