乐趣区

关于c#:如何在-C-中使用-Dapper-ORM

译文链接:https://www.infoworld.com/art…

对象关系映射(ORM)这个概念曾经存在很长时间了,ORM 的作用就是用来解决 编程畛域的 object model 和关系数据库中的 data model 的不匹配问题,Dapper 是一个开源的,轻量级的 ORM 框架,由 Stack Overflow 团队开发,Dapper 和其余风行的 ORM 框架相比,最大的长处就是羽翼级。

Dapper 在最后开发时就思考到了性能和易用性,它反对在 事务,存储过程 或者 批量插入时进行动态或者动静的对象绑定。

应用 Visual Studio 装置 Dapper ORM

要想理解 Dapper,从上面的步骤开始吧:

    1. 关上 Visual Studio
    1. 点击 文件 -> 新建 -> 我的项目
    1. 抉择 网站 -> ASP.Net Web Application
    1. 给 web 我的项目指定一个名字
    1. 而后抉择一个 空模板
    1. 点击 确定 生成 project

这样咱们就创立好了一个 ASP.Net web application 我的项目

如果你曾经装置了 NuGet,你能够通过 NuGet 去装置 Dapper,做法就是在 解决方案窗口 下的 Project 上右键抉择 Manage NuGet Package ... 并且找到 Dapper,而后点击装置开启这个装置过程,一旦 Dapper 被胜利装置,你就能够欢快的玩起来了哈。

应用 Dapper ORM 进行增删查改

接下来我用 Dapper 写一些简略的 CURD 语句来操作数据库,思考如下的 IDG 数据库,蕴含了一个 Author 表,表的字段如下:

  • ID
  • FirstName
  • LastName

在应用 Dapper 时,你须要针对 数据库表 创立一个简略的实体类(POCO class),上面定义了 Author 实体对应 IDB 数据库的 Author 表。


    public class Author
    {public int Id { get; set;}
        public string FirstName {get; set;}
        public string LastName {get; set;}
    }

应用 Dapper 的 Query() 扩大办法,能够实现对数据库的查问而后将数据填充到你的 object model 中,上面办法的作用就是从 Author 表中查问所有的数据,而后存储到内存中,最初返回一个汇合给调用方。


    public List<Author> ReadAll()
    {using (IDbConnection db = new SqlConnection(ConfigurationManager.ConnectionStrings[“AdventureWorks”].ConnectionString))
         {
             return db.Query<Author>
             (“Select * From Author”).ToList();}
    }

对了,为了可能应用上 Dapper 的扩大办法,你须要在代码文件的顶部引入 Dapper 命名空间,如下图:

上面的办法展现了如何从 Author table 表中查问指定的记录。


    public Author Find(int id)    
    {using (IDbConnection db = new SqlConnection(ConfigurationManager.ConnectionStrings [“AdventureWorks”].ConnectionString))
        {
            return db.Query<Author>(“Select * From Author“+ 
            WHERE Id = @Id”, new {id}).SingleOrDefault();}
    }

Dapper 的 Execute() 办法能够实现对数据的新增,批改,删除,此办法返回一个整数值,该值示意在执行查问时受到的影响行数。

上面的办法展现了如何应用 Dapper 更新一条记录。


    public int Update(Author author)
    {using (IDbConnection db = new SqlConnection(ConfigurationManager.ConnectionStrings [“AdventureWorks”].ConnectionString))
        {
            string sqlQuery ="UPDATE Author SET FirstName = @FirstName," +“LastName = @LastName“+“WHERE Id = @Id”;
            int rowsAffected = db.Execute(sqlQuery, author);
            return rowsAffected;
        }
    }

正如下面代码所述,Update 办法返回了一个受影响的行数,意味着这么多的记录被批改,下面这段代码只会有一条记录被更新,所以说如果更新胜利返回的就是 1。

在 Dapper ORM 中应用 存储过程

为了可能应用 Dapper 执行存储过程,在调用 Query 或者 Execute 办法时须要手工指定一下 CommandType 类型,上面的例子展现了如何应用 Dapper 执行 存储过程。


    public List<Author> Read()
    {using (IDbConnection db = new SqlConnection (ConfigurationManager.ConnectionStrings [“AdventureWorks”].ConnectionString))
        {
            string readSp ="GetAllAuthors";
            return db.Query<Author>(readSp, commandType: CommandType.StoredProcedure).ToList();}
    }

Dapper 框架也是反对事务操作的,如果有必要的话能够应用事务,应用形式很简略,你能够利用 BeginTransaction() 和 EndTransaction() 办法,其实和你应用 ADO.NET 的事务形式是一摸一样的,将须要事务的语句代码搁置在 BeginTransaction 和 EndTransaction 之间即可。

Dapper ORM 真的是相当羽翼级 并且十分方便使用,它不会为你生成任何 sql 语句,在这种状况下还可能十分便捷的将查问后果映射到你的 POCO 对象上,最???????? 的是,它的执行速度远超 Entity Framework,实际上,能和原生的 ADO.Net 媲美。

更多高质量干货:参见我的 GitHub: dotnetfly

退出移动版