【问题标题】:Running custom queries in ASP.NET MVC在 ASP.NET MVC 中运行自定义查询
【发布时间】:2013-06-01 02:05:19
【问题描述】:

我不熟悉使用 ASP.net MVC 框架(以及 C#)。我有更多使用 JSP + JSTL MVC 框架的经验。如果需要执行更复杂的 sql,我想知道如何运行自定义查询。 在 JSP 框架中,我习惯于创建 DAO 来查询 sql 表,这在 ASP.net 中似乎并非如此。对于 ASP.net,我注意到我们使用 LINQ 对模型中的 DBSet 对象进行查询。

我的问题:

  1. 在哪里编写自定义查询代码?在模型中?
  2. 我该怎么写?是通过某种 db.execute 语句吗?
  3. 我需要进行任何配置更改吗?
  4. 示例和其他资源会很好。

我尝试浏览 asp.net 上的 asp.net MVC 教程,但找不到任何东西。

【问题讨论】:

标签: c# asp.net-mvc


【解决方案1】:

如何执行 SQL 查询完全取决于您使用的数据访问框架。您可以使用ADO.NET 编写纯 SQL,并以与您期望的方式非常相似的方式执行查询。

在回答您问题的第二部分时,这应该在数据访问层中完成,并且与您的 ASP.NET MVC 应用程序本身完全无关。在该抽象层中实例化和与类进行通信的任何必要逻辑都应驻留在您的控制器中(理想情况下,通过使用接口和/或服务层与您的应用程序松散耦合)。

从这个意义上说,是的,它属于模型。但是,请记住,从概念上讲,ASP.NET MVC 中的“M”是域模型(即前面提到的数据访问层),而不是视图模型。视图模型只是一个独立的包装器,旨在存储给定视图的相关数据,并且在大多数情况下应该完全没有任何逻辑。

【讨论】:

    【解决方案2】:

    在JSP框架中,我习惯于创建DAO来查询sql表 在 ASP.net 中似乎并非如此。

    这非常相似,您应该有一个带有 DAO 对象的单独 DAL 项目,并从您的业务层(另一个单独的项目)中引用这些项目。 ASP.NET MVC 项目本身将添加对业务层项目的引用,而业务层项目又将添加对 DAL 的引用。这样,您可以保持 3 层架构:

    UI (ASP.NET MVC project)
              |
              |
        Business Layer (POCO objects (= to POJO), validation, biz logic) - separate project(s), depending on whether you put your POCO objects in the same project or not.
              |
              |
          Data Access Layer (You can use ADO.NET, EF (LINQ), etc.)
    

    一个 ASP.NET MVC 应用程序通常由 3 个文件夹组成:ModelsViewsControllers 但通常放在 Models 文件夹中的所有内容实际上都是您的业务对象,所以我倾向于摆脱该文件夹完全,我只剩下ViewsControllers 文件夹。视图只是 html 标记,几乎。 Controllers 类只是从业务层调用方法并将结果传递给视图。例如,一个 UserController 类看起来像这样:

    public class UserController : Controller 
    {
            public ActionResult Index()
            {
                var allUsers = UserBusLayer.User.GetAll();
                return View(allUsers);
            }
    }
    

    【讨论】:

    • 如果您删除此文件夹,您是否没有代表数据的类? IE。在您的 DAL 中,您是否使用 sql 查询手动创建表?
    • @de1337ed 如果您使用实体框架,您编写的 LINQ 查询将返回 IEnumerable<T>(集合),其中 T 是一个 POCO 对象,具有与您在 LINQ 中定义的完全相同的属性询问。例如,您的 DAL 中的以下代码:var query = from c in db.Users where c.ZipCode==1234 select c; 将向业务层返回 IEnumerable<User>,业务层从 DAL 获取此集合并将其映射到业务对象。我使用 AutoMapper 轻松地将 DAL 对象映射到 BO 对象。 github.com/AutoMapper/AutoMapper/wiki/Getting-started
    • @de1337ed 最后,您的 ASP.NET MVC 项目看到的只是 BL 中的业务对象,而不是 DAL 返回的对象。请记住,ASP.NET MVC 根本没有对 DAL 的引用。我鼓励您查看AutoMapper。设置映射后,您就完成了编写重复代码以将对象从 DAL 映射到业务层,反之亦然。
    • “模型”文件夹不适用于商业模型实体;它用于视图模型。您应该使用哪个。
    猜你喜欢
    • 2019-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-10
    • 2017-11-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多