我们有一个静态类库来处理重复的多上下文任务。将 EF 数据库上下文创建为静态类的成员是不好的做法吗?
数据库上下文是出于某种原因而被丢弃的。经常处理它们可以使连接池保持“流动”,并且可能(在这里我推测)确保表不会保持锁定状态。
那么我是在为静态类中的数据库上下文带来麻烦,还是我想太多了?
我们有一个静态类库来处理重复的多上下文任务。将 EF 数据库上下文创建为静态类的成员是不好的做法吗?
数据库上下文是出于某种原因而被丢弃的。经常处理它们可以使连接池保持“流动”,并且可能(在这里我推测)确保表不会保持锁定状态。
那么我是在为静态类中的数据库上下文带来麻烦,还是我想太多了?
IMO 这绝对不是你想做的事情。
锁定实际上并不是您将在这里遇到的主要问题。EF 只会在保存更改调用期间锁定(它实际上是使用跟踪图而不是大多数其他 ORM 使用的部分提交事务的一大好处)。
会让你感到厌烦的是跟踪图本身。EF 的工作原理(在大多数情况下)是它保留了它所见过的每个实体的副本,并遍历它们以查找更改的内容并运行一个名为 fixups 的过程,该过程使导航属性与反向链接一起使用。此过程循环遍历上下文所见过的每个实体,并在一系列操作(添加、附加、删除、保存、查询和其他一些操作)上调用。这意味着如果跟踪图很大,则此过程可能需要相当长的时间。如果你让你的上下文永远活着,那么跟踪图的大小就会趋向于你的数据库的大小,这使它变得笨拙和缓慢。
这取决于很多事情,但这里有一些想法,例如:
不管怎样,我认为这是个坏主意。