簡體   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