我在 MVC4 应用程序和 Ninject.MVC3 中使用 EF 4.3。 Controller 是使用 -Repository 开关的 MVC 支架。 MVCScaffolder 使用 EF 创建存储库类(以及相应的 IRepository 接口(interface))进行数据访问,其中 DbContext 派生对象始终作为每个支架存储库中的数据成员“更新”。
MyContext context = new MyContext();
搭建 Controller 的本质是,对于每个 Controller ,您通常还会获得一个相应的存储库。
问题:
1) 为每个有 Controller 的域对象建立一个存储库是否有意义?
与仅聚合根应该的存储库模式相比,这似乎违反直觉
暴露。
2) 每次生成 DbContext 派生对象的新实例是否有意义? 存储库对象已实例化,或者拥有该存储库对象的单例实例是否有意义 DbContext 派生对象在应用程序启动时注册到 DI 容器,并在 像这样的单例存储库:
Bind<MyContext>().To<MyContext>().InSingletonScope(); //ninject code on app startup
//resolve context in repositories:
MyContext context = ServiceLocator.Current.GetInstance<MyContext>();
将 DbContext 派生对象作为 应用程序的生命周期内是单例吗?
谢谢。
最佳答案
- 这取决于您的期望。如果您想使用真正的存储库,您将使用聚合根,并且您将自己编写这些存储库(不会自动生成),因为此类存储库始终是特定的。如果你只想generic wrapper around EF您将使用当前的解决方案。 T
- 通常,在 Controller 必须使用多个存储库并且必须协调将所有存储库中的数据保存在一起(工作单元模式)的情况下,每个 HTTP 请求都会使用新的上下文。 Don't use singleton context!
关于asp.net-mvc-3 - MVC3 支架存储库中的 Singleton DbContext 派生对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10048389/