如果我的問題是正常的,我很抱歉。但我見面的時候我使用實體框架5.實體框架5:使用延遲加載或熱切加載
如果讓我選擇預先加載設計我的ASP.NET MVC 4.0應用這個問題,我只是簡化使用:
public Problem getProblemById(int id) {
using(DBEntity ctx = new DBEntity())
{
return (Problem) ctx.Posts.Find(id);
}
}
但是,如果使用預先加載,我會遇到問題:當我想瀏覽其所有屬性,如評論(問題),用戶(問題)......我必須手動使用Include
來包含這些屬性。有時候,如果我不使用這些屬性,我會失去表現,也許我失去了實體框架的力量。
如果我使用Lazy Loading。有兩種方法可以使用DBContext
對象。第一種方式是在本地使用的DbContext對象:
public Problem getProblemById(int id) {
DBEntity ctx = new DBEntity();
return (Problem) ctx.Posts.Find(id);
}
利用這一點,我想會遇到內存泄漏,因爲CTX將永遠不會再處理。
第二種方法是使的DbContext對象的靜態和全球使用它:
static DBEntity ctx = new DBEntity();
public Problem getProblemById(int id) {
return (Problem) ctx.Posts.Find(id);
}
我看了一些博客,他們說,如果我用這種方式,我必須控制併發訪問(因爲多請求發送到服務器)由我自己,OMG。例如此鏈接:
Entity Framework DBContext Usage
那麼,怎樣才能設計出我的應用程序,請幫我找出。
謝謝:)
因此,如果我使用延遲加載。我如何設計我的應用程序以使用DBContext對象?謝謝:) – hqt
我看到很多帖子(包括MSDN鏈接),建議不要使用延遲加載。所以,爲什麼微軟仍然有這樣的選擇程序員:(他們不作任何改變,使其更容易使用:(): – hqt
@hqt使用延遲加載或不會改變你使用DBContext本身的方式;你會仍然需要找到一種方法來爲每個用戶請求創建一個新的實例,一個簡單的方法是在每個控制器的構造函數中實例化DBContext,並將其傳遞給業務層,一種更健壯的方法是使用IoC框架自動請參閱http://www.codeproject.com/Articles/70061/Architecture-Guide-ASP-NET-MVC-Framework-plus-N-ti例如 – ken2k