6

Проблема возникает при выполнении первых миграций кода EF 6.1.2 в Azure Web Role (WS 2012 R2). Те же миграции выполняются нормально локально, даже если я укажу строку подключения на базу данных Sql (Azure).EF Code First Migration throws StackOverflowException on Azure Web Role

Исключение StackOverflowException генерируется кодом Entity Framework, и первая строка ЛЮБОЙ из моих миграций даже не попадает.

Я попытался запустить миграции три различных способов:

DbMigrator migrator = new DbMigrator(configuration); 
migrator.Update(); // Here the exception is thrown 

второго:

DbMigrator migrator = new DbMigrator(configuration); 
pendingMigrations = migrator.GetPendingMigrations().ToList(); 
foreach (string pendingMigration in pendingMigrations) 
{ 
    migrator.Update(pendingMigration); // Here the exception is thrown 
} 

и используя web.config:

<contexts> 
     <context type="Superb.WorkNextDoor.EFRepository.Context.WndDbContext, Superb.WorkNextDoor.EFRepository, Version=1.0.0.0, Culture=neutral"> 
     <databaseInitializer type="System.Data.Entity.MigrateDatabaseToLatestVersion`2[[Superb.WorkNextDoor.EFRepository.Context.WndDbContext, Superb.WorkNextDoor.EFRepository], [Superb.WorkNextDoor.EFRepository.Migrations.Migrations.WndDbMigrationsConfiguration, Superb.WorkNextDoor.EFRepository.Migrations]], EntityFramework"> 
     </databaseInitializer> 
     </context> 
    </contexts> 

Я вижу StackOverflowException в Визуальном Studio, когда я удаляю отладочную веб-роль. Ошибка регистрируется в журнале событий Windows веб-роли (информация журнала в нижней части этого сообщения).

У меня есть две миграции. Я попытался запустить первый из PMC, а второй из веб-роли, но не повезло.

Я попытался установить .Net 4.5.2 на сервер, изменив размер виртуальной машины с XS на S и понизив EF до версии 6.1.1. Ничего не получилось. Кроме того, я попробовал загрузить папку «E: \ sites \ 0» из веб-роли на мой локальный компьютер, установить приложение в IIS и подключить мой отладчик VS, и это не исключает это исключение. Между моей Windows 8.1 и Windows Server 2012 R2 должно быть что-то другое.

Я потратил много времени на разные вещи, но я не хочу отказываться от этого и выполнять мои миграции из консоли диспетчера пакетов.

Log Name: Application Source: Application Error Date:
1/11/2015 3:21:42 AM Event ID: 1000 Task Category: (100) Level:
Error Keywords: Classic User: N/A Computer:
RD0003FF508F5B Description: Faulting application name: w3wp.exe, version: 8.5.9600.16384, time stamp: 0x5215df96 Faulting module name: clr.dll, version: 4.0.30319.34014, time stamp: 0x52e0b86c Exception code: 0xc00000fd Fault offset: 0x0000000000195499 Faulting process id: 0xc60 Faulting application start time: 0x01d02d4d77fdfb93 Faulting application path: d:\windows\system32\inetsrv\w3wp.exe Faulting module path: D:\Windows\Microsoft.NET\Framework64\v4.0.30319\clr.dll Report Id: f5e4d6dc-9940-11e4-80bd-0003ff508f5b Faulting package full name: Faulting package-relative application ID: Event Xml:
1000 2 100 0x80000000000000 467 Application RD0003FF508F5B w3wp.exe 8.5.9600.16384 5215df96 clr.dll 4.0.30319.34014 52e0b86c c00000fd 0000000000195499 c60 01d02d4d77fdfb93 d:\windows\system32\inetsrv\w3wp.exe D:\Windows\Microsoft.NET\Framework64\v4.0.30319\clr.dll f5e4d6dc-9940-11e4-80bd-0003ff508f5b

Легкие шаги, чтобы воспроизвести эту ошибку:

  1. Скачать этот образец проекта: http://www.asp.net/mvc/overview/getting-started/getting-started-with-ef-using-mvc/migrations-and-deployment-with-the-entity-framework-in-an-asp-net-mvc-application
  2. Добавить CloudServiceProject в раствор и добавить веб-проект в качестве веб-роли
  3. Publish его azure
  4. Просмотрите веб-сайт и перейдите на вкладку студентов (это попадает в базу данных, и инициализатор пытается выполнить миграцию).
  5. Бывает то же самое.
+0

Тонны исследовательских усилий, множество актуальной информации, даже способ полностью воспроизвести проблему. Только один взлет (мой). Сумасшедший мир ... –

+1

@GertArnold Да:/странно, что до этого никто не сталкивался. Я сообщил об этом на codeplex и был назначен для расследования: [https://entityframework.codeplex.com/workitem/2637](https://entityframework.codeplex.com/workitem/2637) –

+0

Возможно, это связано с: [Azure Cloud Проблема с запуском веб-роли (веб-приложения) (Gen2)] (http://stackoverflow.com/q/28022553/861716) –

ответ

2

Это идентифицируется как ошибка в обновлении Microsoft Visual Studio 2013 4. Как временная работа отключает «ленивую инициализацию» в настройках IntelliTrace -> IntelliTrace Events. Мы изучаем исправление этой ошибки в будущем обновлении для Visual Studio 2013.

+0

Спасибо Rajkumar! Рад получить ответ от команды IntelliTrace. Я проверил ваше решение и отлично работает. –

1

Ответственный за исключение StackOverflowException оказался IntelliTrace. Я не знаю причину этого вопроса между IntelliTrace и Code First переселений, которые вызывают это поведение, но когда я скачал журналы IntelliTrace я мог видеть много исключений Sql:

IntelliTrace Summary 2/18/15

Я уже потерял много времени с этим, поэтому я не буду исследовать его дальше. Самый простой обходной путь для меня сейчас просто отключить IntelliTrace перед развертыванием своих веб-ролей:

Disable IntelliTrace

Если кто-то любопытно, вот в IntelliTrace logs.

Я надеюсь, что это поможет кому-то решить эту проблему, не потеряв столько времени, сколько я сделал.

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