Entity Framework 4.3 не создает базу данных - PullRequest
6 голосов
/ 20 февраля 2012

Я создал новый проект и добавил в него новейшую инфраструктуру сущностей (версия 4.3).Я создал классы и контекст, как в предыдущих версиях EF.Однако во время самого первого запуска, когда база данных должна быть создана (в моем случае это SQL Server 2005), я получаю следующую ошибку:

Произошла ошибка при выполнении определения команды.Подробности см. Во внутреннем исключении.

Со следующим внутренним исключением:

Неверное имя объекта 'dbo .__ MigrationHistory'.

AsЯ понимаю, что эта таблица предназначена для миграций, но эта таблица не существует, если нет базы данных.Я что-то не так делаю?

Дополнительная информация: Для тестирования я создал только один класс:

public class Test
{ 
  [Key]
  public int TestId { get; set;}

  public string Name {get; set;}
}

public class Context : DbContext
{
   public Context() : base("MyConnection")
   {
   }

   public DbSet<Test> Tests { get; set;}
}

ОБНОВЛЕНИЕ 1

После некоторых тестовЯ понял, что приложение бросает необработанное исключение из визуальной студии и перерыв в визуальной студии.Исключением было System.Data.EntityCommandExecutionException .Как только я проигнорировал это ожидание и не остановил выполнение кода, была создана база данных.

ОБНОВЛЕНИЕ 2

Еще через несколько часов работы с базой данных я обнаружил, что игра сОпция Enable-Migrations и Update-Database из консоли также решают эту проблему.Он создает базу данных до запуска приложения и не прерывается в Visual Studio.

Ответы [ 2 ]

3 голосов
/ 21 февраля 2012

Не могли бы вы удалить свой конструктор, чтобы EF использовал его строку подключения по умолчанию.

public Context() : base("MyConnection")
{
}

Если это не удастся, попробуйте обновить базу данных из консоли диспетчера пакетов, чтобы узнать, получите ли вы дополнительную информацию.

Update-Database -Verbose

Возможно, не связано в вашем случае, но я получаю ту же ошибку при использовании MvcMiniProfiler 1.9. Если вы также используете его, убедитесь, что профилирование EF отключено, закомментировав строку:

//MiniProfilerEF.Initialize();

Внутри приложения MiniProfiler.


Для других, столкнувшихся с подобной проблемой, я обнаружил, что возобновление миграции из консоли диспетчера пакетов может помочь в некоторых случаях. Прежде чем делать это, убедитесь, что у вас есть копия конфигурации миграции.

Enable-Migrations -Force
2 голосов
/ 17 марта 2012

... и просто добавить еще один возможный ответ для всех, кто сталкивается с подобной проблемой
(примечание: это открытая история, так как очевидно, что есть некоторые ошибки в части миграции) ... Эта ссылка была ближе всего к тому, что мне нужно
Ошибка при запуске Update-Database с EF 4.3 Итак, вам нужно сделать 3 вещи (в таком порядке - и я имею в виду существующий проект):
(все в консоли PM)

  • Убедитесь, что «проект по умолчанию» в PM Console настроен на ваш желаемый проект (т. Е. Для более крупных решений) - который не обязательно соответствует вашему стартовому проекту! (и внимательно следите за комментариями / ответом в личном кабинете относительно того, были ли выполнены действия над проектом, который вы хотите)
  • (1) Enable-Migrations -force
  • (2) Add-Migration Initial
  • (3) Update-Database -Verbose

... если вы все еще получаете исключение в консоли PM

  • (4) тогда вам может потребоваться переместить ваш проект в корень

это звучит глупо, я знаю, но это была главная проблема с моей стороны - у меня была куча папок с решениями, и любое из вышеперечисленных могло не сработать в проектах внутри папок с решениями. Однако, как только я переместил проект в корень, все заработало нормально (исключений больше нет, с включенными или выключенными исключениями или без исключений для CLR) ...
надеюсь, это кому-нибудь поможет

РЕДАКТИРОВАТЬ: если ваш проект модели данных (EF CF) является библиотекой - затем установите этот проект как «проект по умолчанию» в консоли PM - и запустите все вышеперечисленное для этого проекта напрямую (и создать конфигурацию миграции и т. д. в самой библиотеке). В противном случае произойдет сбой (и то же исключение MigrationHistory также не появляется, когда ваша модель является библиотекой - и в ней не определена миграция, а в ней определена миграция в «основном проекте»).

РЕДАКТИРОВАТЬ: вам нужно переместить как lib (модель EF), так и проект 'startup' (вызывающий его) в корень.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...