При запуске нашего приложения мы вызываем метод 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
находится в вызывается из другого класса. Это вполне может быть причиной проблемы.
Вы можете указать, какую версию EF вы используете? –
Устанавливаете ли вы инициализацию. Я имею в виду метод Database.SetInitlializer()? – CodeNotFound