什么时候处理 Web 中的 _db 连接 API
When do dispose of a _db connection in Web API
我一直在阅读有关垃圾收集和使用 IDisposable 通过 entity framework 处理连接的大量资料。我知道我应该在处理完这些资源后立即处理这些资源,但是我还没有看到很多很好的例子来说明何时应该进行该调用以及从何处进行调用并希望确保我正确处理这个问题.
假设我要通过网络 API 调用返回基本库存列表。我的假设是我应该在获得列表后立即调用我的 dispose 方法。这个对吗?例如,让我们看一下服务层中的以下方法:
public class ServiceLayer
{
private InventoryContext _db = new InventoryContext();
public List<Inventory> GetFullInventoryList()
{
var inventoryList = _db.Inventory.ToList();
_db.Dispose();
return inventoryList;
}
public Inventory GetInventoryRecordById(int id)
{
var inventoryRecord = _db.Inventory
.Where(y => y.Id == id)
.First();
_db.Dispose();
return inventoryRecord;
}
}
这是处理资源的正确方法吗?如果不是,应该什么时候调用?如果是正确的,但不是合适的方式,那么合适的方式是什么?
谢谢!
有几个选项可用,但它们都遵循一个共同的规则:上下文的所有者(创建它的人)也应该处置它。
您可以:
在服务方法中创建你的上下文并用相同的方法处理它:
public List<Inventory> GetFullInventoryList()
{
using (var _db = new InventoryContext())
{
return _db.Inventory.ToList();
}
}
在您的服务中创建您的上下文 class 但随后您需要制作 class IDisposable 并实施 dispose pattern。这比较复杂,因此只有在需要调用每个与数据库一起使用的 多个 服务方法时才使用它。
- 使用依赖注入为控制器提供上下文。在这种情况下,上下文的生命周期是在容器中注册时配置的,容器将在您的上下文中调用 dispose(例如
Autofac
或 Windsor
执行此操作,假设您调用 dispose容器或其生命范围)。您可以为此使用 PerWebRequest 生活方式。
我一直在阅读有关垃圾收集和使用 IDisposable 通过 entity framework 处理连接的大量资料。我知道我应该在处理完这些资源后立即处理这些资源,但是我还没有看到很多很好的例子来说明何时应该进行该调用以及从何处进行调用并希望确保我正确处理这个问题.
假设我要通过网络 API 调用返回基本库存列表。我的假设是我应该在获得列表后立即调用我的 dispose 方法。这个对吗?例如,让我们看一下服务层中的以下方法:
public class ServiceLayer
{
private InventoryContext _db = new InventoryContext();
public List<Inventory> GetFullInventoryList()
{
var inventoryList = _db.Inventory.ToList();
_db.Dispose();
return inventoryList;
}
public Inventory GetInventoryRecordById(int id)
{
var inventoryRecord = _db.Inventory
.Where(y => y.Id == id)
.First();
_db.Dispose();
return inventoryRecord;
}
}
这是处理资源的正确方法吗?如果不是,应该什么时候调用?如果是正确的,但不是合适的方式,那么合适的方式是什么?
谢谢!
有几个选项可用,但它们都遵循一个共同的规则:上下文的所有者(创建它的人)也应该处置它。
您可以:
在服务方法中创建你的上下文并用相同的方法处理它:
public List<Inventory> GetFullInventoryList() { using (var _db = new InventoryContext()) { return _db.Inventory.ToList(); } }
在您的服务中创建您的上下文 class 但随后您需要制作 class IDisposable 并实施 dispose pattern。这比较复杂,因此只有在需要调用每个与数据库一起使用的 多个 服务方法时才使用它。
- 使用依赖注入为控制器提供上下文。在这种情况下,上下文的生命周期是在容器中注册时配置的,容器将在您的上下文中调用 dispose(例如
Autofac
或Windsor
执行此操作,假设您调用 dispose容器或其生命范围)。您可以为此使用 PerWebRequest 生活方式。