2017-07-21 80 views
0

首先,我的英語很抱歉。實體框架在第一次查詢時重建模型

我有一個項目與EF 6和ASP.NET MVC 5,我已啓用自動遷移,但每次我做第一個查詢(我的登錄),它需要很長時間運行,約一分鐘左右。我已經調試了代碼,並且看到模型被重新重建,我不知道這是否會發生。我試圖禁用自動遷移:

AutomaticMigrationsEnabled = false; 

在配置類和也:

Database.SetInitializer<Models.CardCotaContext>(new CreateDatabaseIfNotExists<Models.CardCotaContext>()); 

Global.asax類,但一無所獲。

我很擔心,因爲服務器上發生同樣的事情。

謝謝。

+0

的成本如果你手動添加的遷移使用包管理器控制檯中的「add-migration」和「update-database」,不需要設置初始值設定項。如果您發表評論,問題是否會發生? – Ortund

+0

是的,如果我評論該行,同樣的事情發生。我評論保護覆蓋無效OnModelCreating(DbModelBuilder modelBuilder)也沒有。 – MCarmona

回答

0

EF緩存AppDomain和當前正在執行的線程中的大量數據。第一次查詢時發生這種情況(冷查詢)。這有一個缺點,第一個查詢是最慢的。

還有的緩存在這個環節一閒置一段時間後https://msdn.microsoft.com/en-us/library/hh949853(v=vs.113).aspx

IIS關閉其工作進程是如何工作的細節,這將卸載的AppDomain迫使EF上運行的下一個打擊一個寒冷的查詢。當對服務器上的bin文件夾或web.config文件進行更改時也會發生這種情況。因此,當您執行發佈或AppPool關閉時,請期待冷查詢。

如果您使用的是現代版本的IIS(7.5+),則會有一個預初始化功能,允許您在重新啓動池時執行重疊預熱。檢查這個答案詳細信息:How to warm up an ASP.NET MVC application on IIS 7.5?

在回答你的問題,是的,它是正常行爲,兩個以上鍊接會給你一些工具來減輕啓動