ASP.NET MVC3 - 单页上的多个存储过程

时间:2012-06-12 22:59:03

标签: asp.net asp.net-mvc-3 stored-procedures

是否可以调用多个存储过程(不是来自过程的多个结果集)并在ASP.NET MVC 3应用程序中的单个页面上显示结果?

根据我的理解,在任何单个页面上只能创建一个模型,并且我的存储过程已经与该模型绑定。我想调用另一个程序并在我的页面上显示该结果

2 个答案:

答案 0 :(得分:2)

我认为根本问题是理解 MVC模式模型的含义。

首先,

  

该模型由应用程序数据和业务规则组成,控制器调解输入,将其转换为模型或视图的命令。[3]视图可以是数据的任何输出表示,例如图表或图表

source

在ASP.Net MVC中,您将模型链接到您的视图,此模型不应您的域逻辑或任何域对象

真实模型(使用MVC模式的含义)由您的域对象表示。

那么你应该把什么放在链接到你视图的对象里面?

这些对象应包含视图的表示,换句话说,简单的DTO包含将在视图中使用的数据,仅此而已。这些模型应代表视图中使用的数据。如果您使用此方法,并且需要在页面中显示更多数据,则只需要向此模型添加另一个属性,然后您可以在视图中使用它。

在CQRS架构中,这些DTO应由查询存储库填充。

如果您没有CQRS架构,只需在您的域,存储库等中填充这些对象。不要在控制器内部执行此操作,通过使用服务或存储库调用您的真实域来保持控制器清洁和简单

尽量避免重复使用这些DTO,它们应该只属于一个视图。并帮自己一个忙,不要试图重用域对象而不是DTO只是将它用作模型。

遵循这种方法,您的视图模型将是干净的,因为它们将只是DTO并且仅包含视图所需的数据。如果您愿意,您可以从不同的来源填写这些DTO,甚至可以从不同的数据库中填写。

当您想要执行操作时,您将从模型中读取用户提供的数据,并使用此数据通过存储库,服务或CQRS弧调用您的域。使用命令

答案 1 :(得分:1)

你问题的简单答案是“是”。

我建议你在MVC中做更多的研究(即阅读文章和查看示例应用程序)并集中精力理解这些要点:

  • 模型是一个用于对要在视图中显示的数据进行分组的类。它可以通过各种方法填充,而不必是域对象或数据库结果的纯表示。
  • “页面”(用户在浏览器窗口中看到的概念)可以由一个或多个视图组成。每个查看都可以负责显示一种类型的模型,允许重复使用,但“页面”可以有多个 视图
  • 模型与存储过程没有“联系”。也许你正在使用一个返回DTO类的ORM工具(你称之为模型)?这不一定是视图使用的模型控制器可以将其中几个DTO类组合成一个模型类。
  • N层应用程序设计,其中数据库访问与显示逻辑分离。 MVC试图鼓励这一点,但它仍然必须正确完成,以避免自己陷入困境。
祝你好运!