【问题标题】:What is the recommended way to share data between an Action and its Child Actions?在 Action 及其子 Action 之间共享数据的推荐方式是什么?
【发布时间】:2011-10-24 16:41:10
【问题描述】:

我的预期场景如下:

我的主要动作被调用。它打开一些数据库连接。从这个动作的角度来看,我称之为 2 个子动作。这些操作应该重用已经打开的连接。然后在控制器的 Dispose 方法中,我将关闭这些连接。

它不起作用,因为控制器会为每个子动作再次实例化。这样我就不知道如何存储和管理特定于该请求的数据。

我曾想过使用TempData,但它会持续到下一个请求。我不确定这是一个好习惯。

我该怎么办?

【问题讨论】:

  • 在 MVC 模式中,视图不应该(通常)查看数据库。父操作应该直接调用子操作(或执行等效任务)。在视图呈现时,所有数据查找都应该已经完成​​。

标签: .net asp.net-mvc


【解决方案1】:

您是否考虑过使用 DI?

您可以注册与 IoC 容器的连接并根据请求指定其生命周期。比将此连接注入您的控制器。

【讨论】:

    【解决方案2】:

    我对如何使用 MVC 框架有一些想法。

    查看模型\输入模型

    如果视图需要存储在不同位置的大量数据,则创建一个特定的View Model 来聚合它。这种技术的重点是确保当控制器返回视图时,无需返回数据库进行进一步查找。

    这也可以应用于传递给控制器​​动作的模型。 Input Model 将从 UI 收集所有详细信息,为控制器更新底层域做好准备。与View Model 一样,Input Model 的形状适合视图,然后将其与域相关联是控制器的工作。

    管理连接

    问题没有提到为什么需要重用连接。一般来说,我发现最好不要保持与数据库的连接处于打开状态。 .Net 框架在管理连接池方面做得很好。运行查询并尽快关闭连接。 如果你使用像 NHibernate 这样的 ORM,那么你必须确保 SessionFactory 只为应用程序创建一次。这可以通过为它创建一个singleton 来实现。

    【讨论】:

      猜你喜欢
      • 2012-02-05
      • 1970-01-01
      • 2021-08-02
      • 1970-01-01
      • 2011-09-25
      • 2020-06-26
      • 1970-01-01
      • 2016-02-12
      • 1970-01-01
      相关资源
      最近更新 更多