繁体   English   中英

实体框架6更新数据库在卸载appdomain时引发错误

[英]Entity Framework 6 update-database throws error while unloading appdomain

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

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

这一切都已经工作了好几个月了,在上周的某个地方,它开始在播种时引发错误。 我已经浏览了所有变更集(相当一部分),但看不到上下文对象或配置上可能会影响此内容的任何更改。 没有调用外部DLL。

种子将始终运行,但最后它将抛出:

System.CannotUnloadAppDomainException:卸载应用程序域时出错。(来自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删除所有对EF的引用,删除软件包并重新下载它们,删除数据库,但是它将始终引发错误。

我不确定如何找到造成这种情况的原因。 关于如何处理/修复/跟踪的任何想法/过程/想法都将是很棒的。

(发表我的评论)

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

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

这可能与迁移类型中的静态(或其他)构造函数做了长时间的工作有关吗? 还是他们所依赖的东西。

HRESULT: 0x80131015对于此类错误表示您在COM的代码部分中出错了。 从stacktrace中可以看到,在MigrationsDomainCommand.Execute期间出现了错误。

因此,问题在于您的数据没有在一定时间内正确地发送到服务器,或者MigrationsDomainCommand没有收到数据库的成功结果。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM