是否可以在每个CRUD方法中创建一个Entity Framework DataContext对象并将其放置在using块中?

时间:2019-02-08 11:27:30

标签: c# asp.net-web-api

DbContext是轻量级对象;它被设计为每个业务交易使用一次。将DbContext设置为Singleton并在整个应用程序中重复使用它会导致其他问题,例如并发性和内存泄漏问题。

1 个答案:

答案 0 :(得分:1)

DbContext对象不应真正用作单例对象。这是因为它代表Unit of Work,因此应仅保留与数据库进行事务处理的时间。这也是,不是线程安全的。

为您的Web服务器的每个请求创建一个请求是完全可以的,这是一种非常常见的模式。请求完成后,上下文中仅SaveChanges。例如,在某些情况下,您可能希望进行中间保存。如果您没有客户端生成的ID,则可以获取新商品的DB ID。

如果有一个容器,可以使用DI容器为您解决所有问题,.Net Core对此非常擅长。

或者,您可以在控制器中对其进行更新,请记住,这很难编写测试。