entity-framework-6 - 使用 StructureMap 设置实体框架上下文的正确方法
问题描述
我们使用我不太熟悉的 StructureMap 4.7.1。我们还在 ASP.Net MVC 应用程序中使用 Entity Framework 6。我们的解决方案分为多个项目,例如
--Objects
--Business Layer
--Data Layer
--MVC Web App
一切都使用依赖注入,因此 MVC 控制器从业务层获取服务,该服务从数据层获取存储库,该存储库获取数据上下文实例。我们为 StructureMap 设置了注册表文件,如下所示。
public class DefaultRegistry : Registry
{
public DefaultRegistry()
{
Scan(
scan =>
{
scan.SingleImplementationsOfInterface();
scan.TheCallingAssembly();
scan.WithDefaultConventions();
scan.With(new ControllerConvention());
});
For<IDbContext>().HybridHttpOrThreadLocalScoped().Use(new DbContext(DataSources.Database));
}
}
理想情况下,我们希望为每个 http 请求创建一个新的数据上下文实例,我相信它由 HybridHttpOrThreadedLocalScoped 范围控制。但是,它似乎并没有那样工作。如果它是这样工作的,那么我应该能够在请求之间直接对数据库进行更改,并在下一个请求时让它显示数据库中的最新值。但它没有这样做。这就像有一个上下文的单例实例在数据出现缓存时被传递。而且,我可以在请求之间等待很长时间(30 分钟,一个小时),但仍然没有从数据库中获取最新信息。
那么,将其设置为每个 http 请求获取单个实例的正确方法是什么?我已经尝试了以下但仍然没有运气。
For<IDbContext>().HttpContextScoped().Use(new DbContext(DataSources.Database));
For<IDbContext>().Use(new DbContext(DataSources.Database)).Trasient();
解决方案
推荐阅读
- python - numpy 向量化一个 5x5 数组,但允许在 5x5 数组中所做的任何更改反映在向量中
- django - 使用按日期分组的百分比注释查询集
- asp.net-core - 如何在 ASP.NET Core Identity 中扩展和验证会话?
- javascript - 设置 cookie 以存储游戏数据
- javascript - 如何计算午夜 24 小时格式的时差
- java - 如何使用新的导航架构组件保存片段的实例
- javascript - 背景视频播放列表
- git - 如何管理多语言项目的位存储库
- ios - 如何通过页脚单元格在表格视图中使用委托?
- docker - 缺少高山包 py3-scipy