Dapper的基本使用

2 篇文章 0 订阅

http://www.cnblogs.com/Sinte-Beuve/p/4231053.html?utm_source=tuicool&utm_medium=referral


Dapper是.NET下一个micro的ORM,它和Entity Framework或Nhibnate不同,属于轻量级的,并且是半自动的。也就是说实体类都要自己写。它没有复杂的配置文件,一个单文件就可以了。给出官方地址。

http://code.google.com/p/dapper-dot-net/

个人觉得他非常好用,现在已经取代了原来的SqlHelper。优点:

  1. 使用Dapper可以自动进行对象映射!
  2. 轻量级,单文件。
  3. 支持多数据库。
  4. Dapper原理通过Emit反射IDataReader的序列队列,来快速的得到和产生对象。

网上还有对Dapper的扩展类,这里就不赘述了。下面只讲下简单的增删改查、数据库表间的对应关系和事务的应用。

先给出实体类的关系:

 书和书评是1---n的关系。(沿用Entity Framework的实体类,virtual表示延迟加载,此处忽略)

复制代码
//
public class Book
    {
        public Book()
        {
            Reviews = new List<BookReview>();
        }
        public int Id { get; set; }
        public string Name { get; set; }
        public virtual List<BookReview> Reviews { get; set; }
        public override string ToString()
        {
            return string.Format("[{0}]------《{1}》", Id, Name);
        }
    }

//书评
 public class BookReview
    {
        public int Id { get; set; }
        public int BookId { get; set; }
        public virtual string Content { get; set; }
        public virtual Book AssoicationWithBook { get; set; }
        public override string ToString()
        {
            return string.Format("{0})--[{1}]\t\"{3}\"", Id, BookId, Content);
        }
    }
复制代码
  • 基本的增删改查操作

  由于Dapper ORM的操作实际上是对IDbConnection类的扩展,所有的方法都是该类的扩展方法。所以在使用前先实例化一个IDBConnection对象。

IDbConnection conn = new SqlConnection(connString);

Insert

复制代码
 Book book = new Book();
 book.Name="C#本质论";
 string query = "INSERT INTO Book(Name)VALUES(@name)";
//对对象进行操作
 conn.Execute(query, book);
//直接赋值操作
 conn.Execute(query, new {name = "C#本质论"});
复制代码

update

string query = "UPDATE Book SET  Name=@name WHERE id =@id";
 conn.Execute(query, book);

delete

string query = "DELETE FROM Book WHERE id = @id";
conn.Execute(query, book);
conn.Execute(query, new { id = id });

query

复制代码
 string query = "SELECT * FROM Book";
//无参数查询,返回列表,带参数查询和之前的参数赋值法相同。
 conn.Query<Book>(query).ToList();

 //返回单条信息
 string query = "SELECT * FROM Book WHERE id = @id";
 book = conn.Query<Book>(query, new { id = id }).SingleOrDefault();     
复制代码
  • 数据库表对应关系操作
复制代码
//查询图书时,同时查找对应的书评,并存在List中。实现1--n的查询操作
string query = "SELECT * FROM Book b LEFT JOIN BookReview br ON br.BookId = b.Id WHERE b.id = @id";
Book lookup = null;
//Query<TFirst, TSecond, TReturn>
 var b = conn.Query<Book, BookReview, Book>(query,
  (book, bookReview) =>
  {
     //扫描第一条记录,判断非空和非重复
    if (lookup == null || lookup.Id != book.Id)
      lookup = book;
    //书对应的书评非空,加入当前书的书评List中,最后把重复的书去掉。
    if (bookReview != null)
      lookup.Reviews.Add(bookReview);
     return lookup;
  }, new { id = id }).Distinct().SingleOrDefault();
return b;
复制代码
复制代码
//1--1操作 
BookReview br;
string query = "SELECT * FROM BookReview WHERE id = @id";
using (conn)
{
   br = conn.Query<BookReview, Book, BookReview>(query,
  (bookReview, book) =>
   {
    bookReview.AssoicationWithBook = book;
    return bookReview;
   }, new { id = id }).SingleOrDefault();
  return br;
}
复制代码
  • 事务操作
复制代码
using (conn)
{
//开始事务
IDbTransaction transaction = conn.BeginTransaction();
  try
  {
    string query = "DELETE FROM Book WHERE id = @id";
    string query2 = "DELETE FROM BookReview WHERE BookId = @BookId";
    conn.Execute(query2, new { BookId = id }, transaction, null, null);
    conn.Execute(query, new { id = id }, transaction, null, null);
    //提交事务
    transaction.Commit();
  }
  catch (Exception ex)
  {
    //出现异常,事务Rollback
    transaction.Rollback();
    throw new Exception(ex.Message);
  }
}
复制代码

后续文章

  1. 利用Dapper ORM搭建三层架构
  2. Stackoverflow/dapper的Dapper-Extensions用法(一)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Dapper 是一个轻量级的 ORM 框架,使用起来非常简单。下面是一个使用 Dapper 查询数据的示例: 1. 首先,需要在项目中引入 Dapper 库。可以通过 NuGet 包管理器安装 Dapper。 2. 然后,在代码中使用以下语句引入 Dapper 命名空间: ```csharp using Dapper; ``` 3. 接下来,可以使用 Dapper 提供的 `SqlConnection` 类来连接数据库。例如: ```csharp var connectionString = "Data Source=myserver;Initial Catalog=mydatabase;User ID=myusername;Password=mypassword;"; using (var connection = new SqlConnection(connectionString)) { // ... } ``` 4. 在 `SqlConnection` 对象中,可以使用 `Query` 方法来执行查询操作。例如: ```csharp var sql = "SELECT * FROM Customers WHERE Country = @Country"; var customers = connection.Query<Customer>(sql, new { Country = "USA" }); ``` 上面的代码将查询所有国家为 USA 的客户,并将结果映射到 `Customer` 类型的对象列表中。 在查询语句中,可以使用命名参数来传递参数。Dapper 会自动将参数转换为 SQL 参数,从而防止 SQL 注入攻击。 5. 可以使用 `Execute` 方法来执行更新、插入和删除操作。例如: ```csharp var sql = "UPDATE Customers SET Name = @Name WHERE Id = @Id"; var affectedRows = connection.Execute(sql, new { Id = 1, Name = "John" }); ``` 上面的代码将更新 Id 为 1 的客户的名称为 John。 这只是 Dapper 的一些基本用法,Dapper 还提供了许多其他功能,如事务处理、存储过程调用等。需要了解更多信息,请查看 Dapper 的文档。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值