EF CodeFirst: DropCreateDatabaseIfModelChanges не работает - PullRequest
15 голосов
/ 21 марта 2011

Я использую следующий код в моем Global.asax:

DbDatabase.SetInitializer<MyDBContext>
   (new DropCreateDatabaseIfModelChanges<MyDBContext>());

, но, похоже, он не работает.

Хотя моя модель изменилась, и я пытаюсь использоватьодна из недавно добавленных таблиц просто говорит, что таблица не может быть найдена.

Invalid object name 'dbo.TableName'.

Однако, если я запускаю это, оно работает, и создается таблица:

DbDatabase.SetInitializer<MyDBContext>(new DropCreateDatabaseAlways<MyDBContext>());

Это обновляет мою базу данных.

Что такоеэто я не так делаю?

Ответы [ 4 ]

10 голосов
/ 26 марта 2011

Несмотря на это, я столкнулся с множеством проблем с обеими стратегиями DropCreate, потому что Cassini все еще работал после того, как я закрыл браузер. (У меня была та же проблема с IIS Express.) Поскольку локальный веб-сервер все еще работал, Application_Start больше не запускался, поэтому инициализация, которую я там поместил, никогда не выполнялась.

Я решил, включив Редактировать и продолжить:

Свойства проекта > Веб > Отладчики > Включить редактирование и продолжить

Это заставляет локальный веб-сервер закрываться при закрытии браузера.

8 голосов
/ 11 мая 2011

Оказалось, что у пользователя есть права доступа к базе данных master.Странно, что использование DropCreateDatabaseAlways не требует разрешений для основной базы данных, как это делает IfModelChanges.

4 голосов
/ 18 марта 2012

У меня была такая же проблема с:

Database.SetInitializer(new DropCreateDatabaseIfModelChanges<BreakAwayContext>());

В моем случае база данных уже существовала, когда я добавил вышеуказанную строку кода. Я бросил базу данных и снова запустил свою программу, и она начала работать, как и ожидалось. Только другой конфликт мог быть причиной того, что я играл с «Enable-Migrations» в базе данных.

НТН

1 голос
/ 21 марта 2011

Такое поведение ожидается в случае, если вы удалили IncludeMetadataConvention: modelBuilder.Conventions.Remove<System.Data.Entity.Database.IncludeMetadataConvention>();

...