ver*_*ror 13 asp.net entity-framework
我现在正在学习EF并且对ObjectContext有疑问:
我访问数据库时是否应该为每个查询(函数)创建ObjectContext实例?
或者最好创建一次(单例)并重用它?
在EF之前我使用企业库数据访问块并为DataAccess函数创建了dataacess实例...
Luk*_*Led 15
我认为最常见的方法是根据请求使用它.在开头创建它,做你需要的(大多数时候这些是需要常见ObjectContext的操作),最后处理.大多数DI框架都支持这种情况,但您也可以使用它HttpModule来创建上下文并将其放入HttpContext.Current.Items.这是一个简单的例子:
public class MyEntitiesHttpModule : IHttpModule
{
public void Init(HttpApplication application)
{
application.BeginRequest += ApplicationBeginRequest;
application.EndRequest += ApplicationEndRequest;
}
private void ApplicationEndRequest(object sender, EventArgs e)
{
if (HttpContext.Current.Items[@"MyEntities"] != null)
((MyEntities)HttpContext.Current.Items[@"MyEntities"]).Dispose();
}
private static void ApplicationBeginRequest(Object source, EventArgs e)
{
var context = new MyEntities();
HttpContext.Current.Items[@"MyEntities"] = context;
}
}
Run Code Online (Sandbox Code Playgroud)
Ron*_*erg 14
绝对适合每一个查询.它是一个轻量级的对象,因此每次需要时都不会产生太多的成本.
此外,保持ObjectContext活动的时间越长,对它运行查询时它将包含的缓存对象就越多.这可能会导致内存问题.因此,将ObjectContext作为单例是一个特别糟糕的主意.在使用您的应用程序时,您在单例ObjectContext中加载越来越多的实体,直到最终您将整个数据库放在内存中(除非您在不再需要实体时分离实体).
然后是可维护性问题.有一天,你试图追踪一个错误,但无法弄清楚导致它的数据加载位置.
| 归档时间: |
|
| 查看次数: |
4660 次 |
| 最近记录: |