我的应用程序中有一些“缓存”对象,通过依赖注入(Ninject)获得IRepository(自定义存储库模式契约).这些对象仅使用存储库一次,但它们具有刷新功能,强制所有者自行刷新.它们是单例,只创建
IRepositories是基于EF CodeFirst的,所以可以简单地确保连接关闭并永远保持对DbContext的引用吗?
我已经禁用了代理和延迟加载,所以…可以从缓存对象的根目录到数百个这些缓存的POCO实体的长引用?
干杯.
我们参考Julie Lerman的评论,http://msdn.microsoft.com/en-us/magazine/ee532098.aspx?sdmr=JulieLerman
建议是有几个/许多较小的上下文,并且在Web场景的情况下,每个调用创建一个新的上下文.
虽然她在实体框架和AppFabric中写了关于二级缓存的文章.
随着时间的推移,上下文将包含许多对象,并且性能将相应地下降.
我认为这个网站有一些关于EF性能的好建议.
例如生成的视图.
http://msdn.microsoft.com/en-us/data/hh949853
我个人的建议,我不能说是最好的做法,但是从关心表现的人那里,每个电话的小范围内容是一个坚实的长期妥协.
使用生成的视图可以使初始加载时间尽可能小.
您可以通过以下方式管理永久DBContext,以便从上下文中删除未使用的对象.或者使用带有事件的缓存库来执行此操作.不是一个小任务.
我会对您最终选择的解决方案感兴趣.请发布.