EF Code First Migration会在Azure Web角色上引发StackOverflowException

时间:2015-01-11 17:33:31

标签: entity-framework azure ef-migrations stack-overflow

在Azure Web角色(WS 2012 R2)中执行EF 6.1.2代码首次迁移时会出现此问题。即使我将连接字符串指向(Azure)Sql数据库,相同的迁移也可以在本地运行。

实体框架代码抛出StackOverflowException,我的任何迁移的第一行甚至都没有被击中。

我尝试过以三种不同的方式运行迁移:

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>

当我远程调试Web角色时,我在Visual Studio中看到了StackOverflowException。 Web角色的Windows事件日志中记录了一个错误(此帖子底部的日志信息)。

我有两次迁移。我试过从PMC运行第一个,而第二个从Web角色运行,但没有运气。

我尝试在服务器上安装.Net 4.5.2,将VM大小从XS更改为S,并将EF降级到6.1.1版。没有任何效果。此外,我尝试从Web角色下载文件夹“E:\ sites \ 0”到我的本地计算机,在IIS上安装应用程序并附加我的VS调试器,它不会抛出该异常。我的Windows 8.1和Windows Server 2012 R2之间必须有所不同。

我花了很多时间尝试不同的事情,但我不想放弃这一点,必须从包管理器控制台执行迁移。

  

日志名称:应用程序源:应用程序错误日期:
  1/11/2015 3:21:42 AM事件ID:1000任务类别:(100)级别:
  错误关键词:经典用户:N / A计算机:
  RD0003FF508F5B描述:故障应用程序名称:w3wp.exe,   版本:8.5.9600.16384,时间戳:0x5215df96错误模块名称:   clr.dll,版本:4.0.30319.34014,时间戳:0x52e0b86c异常   代码:0xc00000fd故障偏移量:0x0000000000195499故障进程ID:   0xc60错误应用程序启动时间:0x01d02d4d77fdfb93错误   应用程序路径:d:\ windows \ system32 \ inetsrv \ w3wp.exe故障模块   路径:D:\ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ clr.dll报告   Id:f5e4d6dc-9940-11e4-80bd-0003ff508f5b错误包全名:   故障包相关应用程序ID:事件Xml:
                1000       2       100       0x80000000000000              467       应用       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添加到解决方案并将Web项目添加为Web角色
  3. 将其发布到azure
  4. 浏览网站并转到学生选项卡(这会访问数据库,初始化程序会尝试执行迁移)。
  5. 同样发生。

2 个答案:

答案 0 :(得分:2)

这被识别为Microsoft Visual Studio 2013 Update 4中的错误。作为临时解决方案,在IntelliTrace设置下禁用“延迟初始化” - &gt; IntelliTrace事件。我们正在调查在Visual Studio 2013的未来更新中修复此错误。

答案 1 :(得分:1)

负责StackOverflowException的结果是IntelliTrace。我不知道导致此行为的IntelliTrace和Code First Migrations之间问题的根本原因但是当我下载IntelliTrace日志时,我可以看到很多Sql异常:

IntelliTrace Summary 2/18/15

我已经失去了很多时间,所以我不会进一步调查。对我来说最简单的解决方法是在部署我的Web角色之前禁用IntelliTrace:

Disable IntelliTrace

如果有人好奇,这里是IntelliTrace logs

我希望这可以帮助其他人解决这样的问题而不会像我那样浪费太多时间。