实体框架6 update-database在卸载appdomain时抛出错误

时间:2015-03-12 12:15:53

标签: c# entity-framework

我们有一个正在使用自动迁移的EF6应用程序。我们的DbMigrationsConfiguration课程是:

public Configuration()
{
    AutomaticMigrationsEnabled = true;
    AutomaticMigrationDataLossAllowed = true;
}

这一切都已经好几个月了,在上周的某个时候它开始在播种时抛出错误。我查看了所有更改集(少数几个),并且看不到可能影响此内容对象或配置的任何更改。没有外部DLL被调用。

播种将始终运行但最终会抛出:

  

System.CannotUnloadAppDomainException:卸载appdomain时出错。(HRESULT异常:0x80131015)
  在System.AppDomain.Unload(AppDomain域)
  在System.Data.Entity.Migrations.Design.ToolingFacade.Dispose(布尔处理)
  在System.Data.Entity.Migrations.Design.ToolingFacade.Dispose()
  在System.Data.Entity.Migrations.UpdateDatabaseCommand。<> c__DisplayClass2。< .ctor> b__0()
  在System.Data.Entity.Migrations.MigrationsDomainCommand.Execute(操作命令)

     

卸载appdomain时出错。 (HRESULT异常:0x80131015)

如果我从种子中移除任何上下文对象的使用它将正常工作。

如果我做的话:

var objs = context.ObjectX.ToList();

它会抛出错误。

我尝试删除对EF的所有引用,删除软件包并重新下载它们,删除数据库,使用新数据库,但它总是会抛出错误。

我不确定如何追踪造成这种情况的原因。关于如何处理/修复/追踪这一点的任何想法/过程/想法都会很棒。

2 个答案:

答案 0 :(得分:1)

(打开我的评论)

很高兴您可以在https://entityframework.codeplex.com/SourceControl/latest#src/EntityFramework/Migrations/Design/ToolingFacade.cs看到源代码 - 在查找迁移类时,会将它们加载到自己的AppDomain中。完成后,它会上传appdomain。

异常文档https://msdn.microsoft.com/en-us/library/system.cannotunloadappdomainexception%28v=vs.110%29.aspx?f=255&MSPPError=-2147217396表示异常有3个原因 - 它必须是第2或第3个。已经卸载(处理两次?)或正在运行的线程。没有创建线程,所以也许它被处理了两次?

它还可以与迁移类型中的静态(或其他)构造函数做一些长期运行的事情?或者他们依赖的东西。

答案 1 :(得分:0)

HRESULT: 0x80131015 for such errors表示您的COM部分代码出错了。正如您从stacktrace中看到的那样,在MigrationsDomainCommand.Execute期间错误正在增加。

所以问题是您的数据没有正确发送到服务器,或者MigrationsDomainCommand在一段时间内没有从数据库中收到成功结果。

可能是您的应用程序尝试迁移到大量数据或其他什么?检查timeout您的连接 AND 命令 - 默认情况下它们有不同的超时。或者可能只是尝试使用已处置的命令或集合。