2015-11-23 1 views
2

При запуске нашего приложения мы вызываем метод EF code first Database.Initialize(force=true) для инициализации локальной базы данных. На некоторых компьютерах, когда пользователь пытается запустить приложение сразу после входа в учетную запись пользователя, запускаются Migrations, и приложение выходит из строя, потому что первая миграция пытается добавить таблицы в базу данных, которые уже существуют. Второе (или третье) время, когда пользователь запускает приложение, не запускается Миграция, и приложение запускается успешно.Код Entity Framework Первый Database.Initialize вызывает начало создания новой базы данных, когда база данных уже присутствует

Итак, подведем итог:

  • Приложение запускается.

  • Он вызывает Database.Initialize (true);

  • EF не видит базу данных и запускает миграцию для ее создания.

  • Первая миграция пытается добавить таблицы в базу данных и crashses, потому что база данных была там в конце концов.

  • Такое поведение наблюдается только после запуска приложения сразу же после входа в систему.

Кто-нибудь есть какие-либо намек на о том, что происходит?

EDIT Дополнительно:

  • Мы используем EF 6.1.3
  • Припишем инициализатору таким образом: Database.SetInitializer(New DbInitializer), DbInitializer наследуя MigrateDatabaseToLatestVersion(Of OurDbContext, Migrations.Configuration)

Я заметил теперь, что DbInitializer является назначенный в статическом конструкторе OurDbContext, но что метод Database.Initialize находится в вызывается из другого класса. Это вполне может быть причиной проблемы.

+0

Вы можете указать, какую версию EF вы используете? –

+1

Устанавливаете ли вы инициализацию. Я имею в виду метод Database.SetInitlializer()? – CodeNotFound

ответ

1

Проблема, похоже, действительно связана с тем, что назначение реализации MigrateDatabaseToLatestVersion вызывалось в статическом конструкторе DbContext, а вызов Database.Initialize - из другого класса. В некоторых системах кажется, что инициализатор изменен с DropCreate на Migrate на полпути во время инициализации или что строка соединения изменяется.

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