在查询对象上封装上下文构造函数
Encapsulate context constructor on a query object
创建一个 class 来保存查询和上下文构造函数作为 Context 的 Func 和 TEntity 的 IQueryable 的 Func 来解决上下文生命周期问题是个好主意吗?
示例:
在您的数据层上,如果您使用 "using" 语句为每个方法使用一个上下文,则不能 return IQueryables 因为在释放上下文后这将无效,这使您可以使用:
- 每个表单一个上下文(这需要将表单上下文注入到您的数据层)
- 线程静态上下文
- 在 return 查询之前调用 ToList()(禁用查询组合)
据我所知,上下文旨在根据需要创建和重新创建,而不是静态地保存在内存中(尽管我也这样做过)。我发现在我的 class 中创建上下文通常非常好(例如控制器 class,甚至是 MVC 应用程序的视图模型 class),然后让所有方法都使用它.
但是,如果您想为所有用户缓存大量静态数据,我会将其静态保存在内存中。正如您提到的,您只需要考虑线程。如果您是只读的,您可以创建只读锁来访问此数据(不是 C# lock{}
)。
有关静态的更多详细信息:https://msdn.microsoft.com/en-us/library/system.threading.readerwriterlock(v=vs.110).aspx
you don't really need to dispose of them in most cases - and that's by design
创建一个 class 来保存查询和上下文构造函数作为 Context 的 Func 和 TEntity 的 IQueryable 的 Func 来解决上下文生命周期问题是个好主意吗?
示例: 在您的数据层上,如果您使用 "using" 语句为每个方法使用一个上下文,则不能 return IQueryables 因为在释放上下文后这将无效,这使您可以使用:
- 每个表单一个上下文(这需要将表单上下文注入到您的数据层)
- 线程静态上下文
- 在 return 查询之前调用 ToList()(禁用查询组合)
据我所知,上下文旨在根据需要创建和重新创建,而不是静态地保存在内存中(尽管我也这样做过)。我发现在我的 class 中创建上下文通常非常好(例如控制器 class,甚至是 MVC 应用程序的视图模型 class),然后让所有方法都使用它.
但是,如果您想为所有用户缓存大量静态数据,我会将其静态保存在内存中。正如您提到的,您只需要考虑线程。如果您是只读的,您可以创建只读锁来访问此数据(不是 C# lock{}
)。
有关静态的更多详细信息:https://msdn.microsoft.com/en-us/library/system.threading.readerwriterlock(v=vs.110).aspx
you don't really need to dispose of them in most cases - and that's by design