【问题标题】:When using ASP.NET MVC and LINQ, should you be creating stored procedures in your SQL database? [closed]使用 ASP.NET MVC 和 LINQ 时,是否应该在 SQL 数据库中创建存储过程? [关闭]
【发布时间】:2016-01-16 07:21:16
【问题描述】:

这是我不明白的。存储过程的传统智慧是始终创建它们,如果您知道将作为应用程序的一部分执行的查询并且可以用参数来描述它(这就像 99.9999% 的时间......另外 0.0001% 是如果您创建的应用程序中的查询是不可预测的,因为用户正在编写查询或其他内容)。但是,如果我这样做——为一切设置触发器、级联删除、存储过程——当我创建我的数据库时,那么即使有一个模型又有什么意义呢?在这种情况下,模型服务的唯一目的是告诉数据库“开始!”数据库执行所有逻辑。使 MVC 中的 M 非常无关紧要。

很抱歉,这似乎是一个基于意见的问题,但我觉得我并没有真正了解 ASP.NET MVC 的要点,如果一方面有人告诉我“让数据库处理尽可能多的逻辑" 而另一方面,这些工具,如 LINQ、Entity 等,都是用于创建 C# 查询数据库的方式。

ASP.NET MVC 和存储过程是反义词吗?

【问题讨论】:

  • 4 人投票支持关闭此问题,原因是“不清楚您在问什么”。好吧,如果有理由关闭这个问题,我会说主要基于意见将是一个更好的选择,但即使这对我来说似乎也不是一个很好的理由。您可以在 MVC 应用程序中使用存储过程这一事实不是基于意见的,如果您认为不应该使用它们,那么您对 ​​MVC 一无所知。

标签: asp.net asp.net-mvc linq stored-procedures database-design


【解决方案1】:

首先,ASP.NET MVC 和存储过程不是反义词。他们只是没有关系。但这并不意味着它们不能同时在同一个应用程序中。

我想将 MVC 视为演示/UI 的设计模式。 MVC 中的 M 是您要表示的实体。它可以是包含用户名和密码的简单登录模型,也可以是代表社交媒体用户的更大模型,具有状态更新、朋友列表及其状态更新。对于非常小的应用程序,该模型可以与您的数据集完全匹配;在这种情况下,您的模型可以是您的数据集。但在较大的应用程序中,您的模型可以表示业务对象,这些对象通常与底层数据集不完全对应。

很多 ASP.NET MVC 示例都是使用数据集作为模型的小型应用程序。但这通常不是用于将数据库与表示层分离的大型应用程序的好设计。在这种情况下,模型可能是业务对象,它们将位于您的业务逻辑层上,这可能与您的数据访问层不同。在这种情况下,模型不知道您的数据库,也不知道您是使用存储过程还是 LINQ 进行查询。

ASP.NET MVC 应用程序也可以通过另一个应用程序的 API 检索和更新数据。在这种情况下,MVC 应用程序的模型将是 API 返回或接受的数据。 API 处理模型检索和持久性。

所以 MVC 中的 M 可以不仅仅是数据库中的数据集。

至于查询,是的,在数据​​服务器上运行尽可能多的查询是一个好习惯,因为您的数据服务器就是为此而设计的。你可以让你的数据服务器只返回你的应用程序需要的数据。您可以通过使用存储过程或 LINQ 来实现这一点。我更喜欢使用 LINQ 而不是存储过程。如果可以的话,我会避免使用存储过程。但这是我的偏好。我也倾向于不将任何业务逻辑放在存储过程中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-10-10
    • 1970-01-01
    • 1970-01-01
    • 2012-11-28
    • 2012-04-01
    • 1970-01-01
    • 2014-06-22
    相关资源
    最近更新 更多