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

本文关键字:迁移 客户端 上下文 连接 字符串 何强制 | 更新日期: 2023-09-27 18:37:07

应用程序使用 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();

配置类

public sealed class Configuration : DbMigrationsConfiguration<ClientContext>
{
    public Configuration()
    {
        AutomaticMigrationsEnabled = false;
    }
}

客户端上下文类

public class ClientContext : DbContext
{
    public ClientContext()
        : this(Properties.Settings.Default.OnlineConnectionString)
    {
    } 
    public ClientContext(string connectionString) : base(connectionString)
    {
    }
}

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

将 true 传递给构造函数

(将 true 传递给构造函数表示迁移应重用触发迁移的客户端上下文)。无需手动向初始值设定项提供连接字符串。

Database.SetInitializer(new MigrateDatabaseToLatestVersion<ClientContext, Configuration>(true));

在数据库配置类中设置目标数据库;

  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.");
        }
    }