我的预期场景如下:
我的主要动作被称为。它打开一些数据库连接。在这个操作的视图中,我调用了2个子操作。这些操作应该重用已经打开的连接。在控制器的Dispose方法中,我将关闭这些连接。
它不起作用,因为每个子操作都会再次实例化控制器。这样我就不知道如何存储和管理特定于此请求的数据。
我想使用TempData
,但它持续到下一个请求。我不确定这是不是一个好的做法。
我该怎么办?
您考虑过使用DI吗?
您可以向IoC容器注册连接,并根据请求指定其生存期。然后将此连接注入到控制器。
关于如何使用MVC框架,我有一些想法。
View ModelInput Model
如果一个视图需要存储在不同位置的大量数据,那么创建一个特定的View Model
来聚合它。此技术的要点是确保当控制器返回视图时,不需要返回数据库进行进一步查找。
这也可以应用于传递给控制器动作的模型。Input Model
将从UI收集所有细节,以便控制器更新底层域。与View Model
一样,Input Model
的形状适合视图,然后将其与域关联是控制器的工作。
问题没有提到为什么需要重用连接。一般来说,我发现最好不要保持与数据库的连接打开。. net框架在管理连接池方面做得很好。运行查询并尽快关闭连接。如果你使用像NHibernate这样的ORM,那么你必须确保SessionFactory
只为应用程序创建一次。这可以通过创建一个单例来实现。