ASP.NET MVC 使用 Dapper 管理 SQLConnection

Posted

技术标签:

【中文标题】ASP.NET MVC 使用 Dapper 管理 SQLConnection【英文标题】:ASP.NET MVC Manage SQLConnection with Dapper 【发布时间】:2011-04-19 13:31:40 【问题描述】:

我正在使用 MVC 快速使用 Stack Overflow/Sam Saffron 发布的新 Dapper Micro ORM。我想知道在我的控制器中管理 SQLConnection 对象的最简单方法是什么?我正在做一些像这样简单的事情,只是为了浏览一些数据并测试 Dapper,但是像这样打开/关闭连接是个好主意吗?

public class HomeController : Controller

    SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["ajh"].ConnectionString);

    public HomeController()
    
    

    public ActionResult Index()
    
        // get me all comments
        conn.Open();
        var comments = conn.ExecuteMapperQuery<Comment>("select * from Comment");
        conn.Close();

        return View(comments);
    

【问题讨论】:

【参考方案1】:

尽可能在本地创建、打开和关闭连接:

public class HomeController : Controller

    public HomeController()
    
    

    public ActionResult Index()
    
        List<Comment> comments;
        using (var conn = new SqlConnection(/* ... */))
        
            conn.Open();
            comments = conn.ExecuteMapperQuery<Comment>("select * from Comment");
        
        return View(comments);
    

尽管最好避免在控制器中直接访问数据。将您的数据访问方法埋在 CommentsService 类或类似的类中,然后从您的控制器中调用它。

【讨论】:

卢克感谢您的回答。我只是在考虑一个极小的 CRUD 应用程序,让它尽可能简单。 @aherrick:很公平,我可能也会这样做。如果代码真的这么简单,那么添加额外的层和抽象通常会使事情变得更糟,而不是更好!【参考方案2】:

我从来没有使用过它,但是var comments 的执行被推迟了,那么你就会遇到问题,并且必须使用 .ToList 之类的东西在关闭连接之前完全枚举结果。否则,如果 .ExecuteMapperQuery 在返回结果之前完全枚举结果,你会没事的

【讨论】:

感谢您的回复。是的,它完全枚举并返回一个 T 列表。我想知道更多,所以有没有更好/更清洁的方法来管理我的 SQLConnection 对象,并且每次都必须打开/关闭给定的连接。 @aherrick,只需在基本控制器或外部助手中执行...您不想在单个页面上打开和关闭连接 50 次...即使使用池化也可以获得昂贵 @SamSaffron 如果我在控制器中打开一个连接并在 Dispose 方法中处理它可以吗? @SamSaffron 我有点困惑。 Jon Skeet 在这篇文章中说:“最好的方法几乎总是在每次需要时创建一个新的 SqlConnection - 并在完成后立即处理它”:***.com/questions/26925209/…

以上是关于ASP.NET MVC 使用 Dapper 管理 SQLConnection的主要内容,如果未能解决你的问题,请参考以下文章

在 asp.net 核心上使用 Dapper 插入

ASP.NET Core API ——Dapper的使用

ASP.NET Core 中的 ORM 之 Dapper

ASP.NET MVC:窗体身份验证及角色权限管理示例

asp.net core 系列之webapi集成Dapper的简单操作教程

七天学会ASP.NET MVC ——Layout页面使用和用户角色管理