在ASP.NET Web API的OData教程中,他们总是将新的DbContext
设置为控制器的私有属性。
public class LocationPropertiesController : ODataController
{
Entities ctx = new Entities();
[EnableQuery]
public IQueryable<LocationProperties> Get()
{
return ctx.LocationProperties;
}
protected override void Dispose(bool disposing)
{
ctx.Dispose();
base.Dispose(disposing);
}
}
认为dispose方法可以完成这项工作。
但实际情况是,上下文,连接或其他任何内容都可能失败,然后我留下了一个处理后的ctx,我无法在以下请求中重复使用,因为给我的控制器仍然是同一个实例。
另一方面,如果返回了IQueryable,那么OData可以对生物进行过滤,如果我使用(ctx ...)包装该查询,那么我就成了数据库的胖客户端。
那么我们处理OData中的设计缺陷还是我在这里缺少什么?