Ошибка при попытке программного применения Entig Framework Code First Migrations
Я пытаюсь использовать код первой миграции для Entity Framework 6.0
Это приложение для настольных компьютеров (WPF), которое в настоящее время используется на нескольких сайтах с собственной копией базы данных, поэтому запуск update-database из консоли диспетчера пакетов бесполезен.
До сих пор я использовал автоматические миграции, но теперь мне нужно применить более сложную миграцию, чем это позволит. Новая миграция применяется правильно, если
update-database -force
используется опция (конечно, восстановление базы данных до ее предварительно обновленного состояния перед тестированием, что следует)
DbConfiguration
(который работал с AutomaticMigrations
) было настроено так:
[DbConfigurationType(typeof(ContextCeConfiguration))]
public class TrialDataContext : DbContext, ITrialDataContext
{
...
}
public class ContextCeConfiguration : DbConfiguration
{
public ContextCeConfiguration()
{
SetProviderServices(
SqlCeProviderServices.ProviderInvariantName,
SqlCeProviderServices.Instance);
SetDatabaseInitializer<TrialDataContext>(new DataContextInitialiser());
}
}
class DataContextInitialiser : MigrateDatabaseToLatestVersion<TrialDataContext,TrialDataConfiguration>
{
}
internal sealed class TrialDataConfiguration : DbMigrationsConfiguration<BlowTrial.Domain.Providers.TrialDataContext>
{
public TrialDataConfiguration()
{
AutomaticMigrationsEnabled = true;
}
}
Я изменил класс DbMigrationsConfiguration на:
internal sealed class TrialDataConfiguration : DbMigrationsConfiguration<BlowTrial.Domain.Providers.TrialDataContext>
{
public TrialDataConfiguration()
{
AutomaticMigrationsEnabled = false;
DbMigrator migrator = new DbMigrator(this);
if (migrator.GetPendingMigrations().Any())
{
migrator.Update();
}
}
Тем не менее, строка:
DbMigrator migrator = new DbMigrator(this);
Вызывает исключение:
ValueFactory попытался получить доступ к свойству Value этого экземпляра.
Может кто-нибудь, пожалуйста, предложите, как / где я должен создать экземпляр DbMigrator
так что обновления могут быть применены программно