我们有一个正在使用自动迁移的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的所有引用,删除软件包并重新下载它们,删除数据库,使用新数据库,但它总是会抛出错误。
我不确定如何追踪造成这种情况的原因。关于如何处理/修复/追踪这一点的任何想法/过程/想法都会很棒。
答案 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 命令 - 默认情况下它们有不同的超时。或者可能只是尝试使用已处置的命令或集合。