【问题标题】:EF Code First Migration throws StackOverflowException on Azure Web RoleEF 代码优先迁移在 Azure Web 角色上引发 StackOverflowException
【发布时间】:2015-01-11 17:33:30
【问题描述】:

在 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 运行第一个,从网络角色运行第二个,但没有运气。

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

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

日志名称:应用程序来源:应用程序错误日期:
2015 年 1 月 11 日凌晨 3:21:42 事件 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. 同样如此。

【问题讨论】:

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


【解决方案1】:

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

【讨论】:

  • 感谢拉杰库马尔!很高兴收到 IntelliTrace 团队的答复。我已经测试了您的解决方法,效果很好。
【解决方案2】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 2016-05-26
    • 2013-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-18
    • 1970-01-01
    • 2012-09-15
    • 1970-01-01
    相关资源
    最近更新 更多