的想法是創建一個公開的上下文句柄,但它在Web應用程序的存儲類。實體框架:Singletonish ObjectContext - 好,壞,還是過度?
目前,這是我所:
public class EntityContext
{
private static String MAIN_CONTEXT_KEY = "MainContext";
private static TISQLEntities _context;
public static void RemoveContext()
{
if (
HttpContext.Current != null
&&
HttpContext.Current.Items[MAIN_CONTEXT_KEY] != null
)
{
((TISQLEntities)HttpContext.Current.Items[MAIN_CONTEXT_KEY]).Dispose();
HttpContext.Current.Items[MAIN_CONTEXT_KEY] = null;
}
if (_context != null)
{
_context.Dispose();
_context = null;
}
}
public static TISQLEntities Context
{
get
{
if (HttpContext.Current == null)
{
if (_context == null)
{
_context = new TISQLEntities();
}
return _context;
}
if (HttpContext.Current.Items[MAIN_CONTEXT_KEY] == null)
{
HttpContext.Current.Items[MAIN_CONTEXT_KEY] = new TISQLEntities();
}
return (TISQLEntities)HttpContext.Current.Items[MAIN_CONTEXT_KEY];
}
}
}
然後在Global.asax文件:
protected void Application_EndRequest(object sender, EventArgs e)
{
EntityContext.RemoveContext();
}
的想法是,如果這是一個Web應用程序,上下文中運行首先需要創建(並保存到當前的HttpContext),並在請求結束時拆除。
如果這是一個單元測試的情況是對上首先需要創建,並在TestCleanup刪除(在此崗位作爲重要的,但只是想澄清_context對象)。
現在這背後的想法是,至少可以不必這樣做:
using(TISQLEntities context = new TISQLEntities())
{
....
}
每次我想查詢。我知道這可能是我的懶惰,但我只是覺得它更容易和更清潔的有:
EntityContext.Context.User.Select(...)
和「使用」,我儘量避免在大多數情況下可避免。最重要的是,我沒有爲每個回發創建9001個上下文。
現在我很好奇的是,我會在想這是什麼?我應該不斷爲每種需要的方法創建一個上下文嗎?說上一回後我必須:
- 從ID
- 獲取用戶從一個id
- 得到一個站點的站點添加到用戶(user.Site = foundSite)
- 保存用戶
這可能意味着至少3個上下文。實體框架是否足夠聰明,可以隨時保持創建上下文?
我不知道這完全是一種模式,但是我之前和nHibernate一起工作過,並試圖對EF做同樣的事情。這基本上是我想要完成的。 – 2009-02-12 19:07:27