我的预期情况如下:
我的主要动作是召唤。它会打开一些数据库连接。在这个动作看来,我称之为2个孩子的行为。这些操作应该重用已经打开的连接。在控制器的Dispose方法中,我将关闭这些连接。
它不起作用,因为控制器会针对每个子操作再次实例化。这样我就不知道如何存储和管理特定于此请求的数据。
我想过使用TempData
,但它会持续到下一个请求。我不确定这是一个好习惯。
我该怎么办?
答案 0 :(得分:2)
您是否考虑过使用DI?
您可以注册与IoC容器的连接,并根据请求指定其生命周期。然后将此连接注入您的控制器。
答案 1 :(得分:0)
关于如何使用MVC框架,我有几点想法。
如果视图需要大量存储在各种不同位置的数据,那么请创建一个特定的View Model
来聚合它。这种技术的目的是确保当控制器返回视图时,不需要返回数据库进行进一步的查找。
这也可以应用于传递给控制器动作的模型。 Input Model
将收集UI中的所有详细信息,以便控制器更新基础域。与View Model
一样,Input Model
处于适合视图的形状,然后控制器作业将其与域相关联。
问题没有提到为什么需要重用连接。一般来说,我发现最好不要打开与数据库的连接。 .Net框架在管理连接池方面做得很好。运行查询并尽快关闭连接。
如果您正在使用像NHibernate这样的ORM,那么您必须确保仅为应用程序创建一次SessionFactory
。这可以通过为其创建singleton来实现。