MVC 中带有 Ninject 的适当存储库生命周期范围

2024-04-20

在 MVC 3 应用程序中将 Entity Framework 4 与 Ninject 结合使用时,存储库和 EF 上下文的适当生命周期范围是什么?

我一直在使用默认的 InTransientScope,但质疑是否应该使用 InRequestScope。

 public class MyController: Controller
 {
   private readonly IMyRepo _repo;
   public MyController(IMyRepo repo)
   {
     _repo = repo;
   }

   public ActionResult Index()
   {
     var results = _repo.GetStuff();
     return View(results);
   }
 }

忍者模块:

  public class MyServices : NinjectModule
  {
    public overrride void Load()
    {
      Bind<IMyRepo>.To<MyRepo>();
      Bind<MyContext>.ToSelf();
    }
  }

MyRepo:

public class MyRepo: IMyRepo
{
  private readonly MyContext _context;
  public MyRepo(MyContext context)
  {
    _context = context;
  }
  public IEnumerable GetStuff()
  {
    return _context.Entity;//query stuff
  }

}

您的存储库可以是瞬态范围,但是,我会将上下文绑定在请求范围中。这样,您的所有存储库实例将共享相同的上下文。通过这种方式,您可以获得 ORM 的缓存和事务优势。

当前它在代码中的工作方式是,每当您请求一个新上下文时,都会创建一个新上下文。因此,如果您的控制器首先使用存储库,然后调用另一个模块,该模块又使用存储库。每个存储库都将具有不同的上下文实例。因此,实际上您现在只是将 ORM 用作连接管理器和 SQL 生成器。

这也可能产生意想不到的后果。想象一下如下代码:

public ActionResult MyAction(int id)
{
    var entity = _repository.Get<Entity>(id);
    entity.Prop = "Processing";
    _module.DoStuff(id);
}

如果DoStuff方法,最终调用_repository.Get<Entity>(id);同样,您的实体将有 2 个不同步的不同副本。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MVC 中带有 Ninject 的适当存储库生命周期范围 的相关文章

随机推荐

  • 在 iPhone 中的应用程序中评价我在 iTunes 中的应用程序

    我必须在我的应用程序中提供一个链接 用户点击它就会将我带到应用程序的 itunes Appstore 页面 用户可以在其中对应用程序进行评分 我认为其他应用程序尝试访问设备中的Appstore应用程序并在itunes中传递该应用程序的相应u
  • PowerShell 5 中的写入主机与写入信息

    众所周知 Write Host是邪恶的 在PowerShell 5 Write Information被添加并被考虑替换Write Host 但是 说实话 哪个更好呢 Write Host是邪恶的 因为它不使用管道 因此输入消息无法被重用
  • 如何使用Android KeyStore安全存储任意字符串?

    我希望能够在 Android KeyStore 中安全地存储一些敏感字符串 我从服务器获取字符串 但我有一个用例需要我保留它们 KeyStore 只允许从与分配给我的应用程序相同的 UID 进行访问 并且它将使用设备主密码对数据进行加密 因
  • R Shiny Memory Leak - 有关如何查找的建议?

    我正在寻找有关如何识别 R 闪亮程序中内存泄漏的一般想法 我正在努力确定泄漏的确切位置 因此很难重新创建 而且我的代码已经超过 1000 行 我确信它与观察和观察事件有关 但我无法准确指出它 我实际上很喜欢 bborgeser 在这里提出的
  • 如何根据iOS上的touchMove事件在屏幕上绘制动态矩形

    矩形将被视为两个点 第一个点将是 touchBegan 点 在 touchMove 上将是第二个点 矩形将根据用户手指的移动动态绘制 就像当您单击桌面并移动桌面时 鼠标您将获得动态矩形 Thanks 好的 这是你如何绘制矩形的方法touch
  • 如何展平嵌套的Python字典?

    我正在尝试展平嵌套字典 dict1 Bob shepherd 4 6 3 collie 23 3 45 poodle 2 0 6 Sarah shepherd 1 2 3 collie 3 31 4 poodle 21 5 6 Ann sh
  • 尽管确实存在,但“不存在具有给定标识符的行”

    我正在使用 Hibernate 并得到 线程 main 中的异常 org hibernate ObjectNotFoundException 不存在具有给定标识符的行 271 这个错误的奇怪之处在于 具有给定 id 的对象存在于数据库中 我
  • 子进程超时失败

    我想在子进程上使用超时 from subprocess32 import check output output check output sleep 30 shell True timeout 1 不幸的是 虽然这会引发超时错误 但它会在
  • 时间数组在建模中超出范围?

    这些天我正在尝试使用新的气象数据 以 netcdf 格式而不是旧的 cray 格式给出 运行我的气候模型 模型编译顺利 但是当进行模拟时 模型在第一天运行良好 但在模拟的第二天就停止了 总是在同一时间步长 无论我使用哪个开始日期 错误是 f
  • MySQL 的锁定和并发

    我目前正在将 Mysql 与 InnoDB 存储引擎用于所有表 所以 我想知道这是否是一个真正的问题以及是否有解决方案 例如 我将使用数据库事务向用户收费 1 检查他的余额 2 减去他的余额 3 将此余额记入某处 4 提交 如果更新发生在
  • 在 Chrome 扩展中,有没有一种方法可以以编程方式“单击”pageAction 按钮

    我有一个带有 pageAction 按钮的 Chrome 扩展程序 用户单击它 就会显示 popup html 窗口 以便用户可以执行需要的操作 有没有一种方法可以装饰页面上的链接 以便当用户单击该链接时 它会以编程方式向 pageActi
  • $this->form_validation->run() 在没有验证规则的情况下返回 FALSE

    使用 CodeIgniter 时Form validation类 该set rules 方法允许用户向其表单字段添加无限数量的检查 这些规则通常都定义在同一个地方 就在run 方法被调用 有效示例 Require the user to b
  • 为什么 jQuery 文件上传插件的进程事件不触发?

    我对 jQuery 文件上传插件有一个奇怪的问题 如果我使用这个 SITAX fileupload fileupload url myurl add function e data console log add event process
  • 如何将pandas数据框的单行拆分为两行?

    我试图将数据框的单行分成两行 在数据框中 开始和结束列可用 我想根据条件拆分行 我有一个如下所示的数据框 symbol start end size ABC 2015 08 27 18 00 00 2015 08 28 05 00 00 1
  • Haskell:为什么将辅助函数命名为“go”?

    I see go在阅读 Haskell 材料或源代码时 我经常会遇到这样的情况 但我从来没有真正感到舒服 我猜它在我的脑海中具有 goto 的负面含义 我开始用 LYAH 学习 Haskell 这就是我开始使用 Haskell 的原因acc
  • WebView - 在每个请求上定义用户代理

    目前 我将请求消息的 User Agent 设置如下 var rm new HttpRequestMessage HttpMethod Post new Uri http example com rm Headers Add User Ag
  • Android:如何最大化 PreferenceFragment 宽度(或消除边距)?

    如果您查看 Android 设置屏幕截图或BC碎片 https github com commonsguy cw android tree master Prefs FragmentsBC截图中 PreferenceFragment 中有边
  • 如何在 C# 中编写条件锁?

    问题是我一直在使用锁语句 http msdn microsoft com en us library c5kehkcz aspx为了保护我的代码的关键部分 但现在 我意识到我可以允许在满足某些条件的情况下并发执行该关键代码 有没有办法调节锁
  • PHP 字符串不允许使用 < 和 > 字符

    我的代码中有一个字符串 如下例所示 很简单 但是当我尝试回显字符串时 它不喜欢 字符 所有得到回应的是 巴拉巴拉 所以 基本上我猜我需要转义这些字符才能让它们在 PHP 中工作 但我不确定具体如何操作 我将其用于模板系统 因此在 html
  • MVC 中带有 Ninject 的适当存储库生命周期范围

    在 MVC 3 应用程序中将 Entity Framework 4 与 Ninject 结合使用时 存储库和 EF 上下文的适当生命周期范围是什么 我一直在使用默认的 InTransientScope 但质疑是否应该使用 InRequest