2015-01-12 2 views
2

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

ответ

3

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

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

Набор TargetDatabase в классе конфигурации БД;

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

Мне нужно иметь возможность напрямую подключать строку подключения, поскольку она отсутствует в app.config (она может быть предоставлена ​​пользователем). – alik

+0

См. Обновленный ответ. – ziyasal

Смежные вопросы