Как заставить миграцию использовать строку подключения клиентского контекста, вызвавшего миграцию

Приложение использует 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;
    }
}

Класс ClientContext

public class ClientContext : DbContext
{

    public ClientContext()
        : this(Properties.Settings.Default.OnlineConnectionString)
    {
    } 

    public ClientContext(string connectionString) : base(connectionString)
    {
    }
}

person alik    schedule 12.01.2015    source источник


Ответы (2)


Передайте значение true конструктору (передача значения true конструктору означает, что миграция должна повторно использовать контекст клиента, запускающий миграцию). Нет необходимости вручную указывать строку подключения инициализатору.

Database.SetInitializer(new MigrateDatabaseToLatestVersion<ClientContext, Configuration>(true));
person alik    schedule 13.01.2015

Установите TargetDatabase в своем классе конфигурации db;

  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.");
        }
    }
person ziyasal    schedule 12.01.2015
comment
Мне нужно указать строку подключения напрямую, поскольку ее нет в app.config (она может быть предоставлена ​​пользователем). - person alik; 12.01.2015