助力产业智慧升级,云服务器首年88元起,更有千元代金券礼包免费领!

搜搜吧

查看: 152|回复: 0

[移动开发] Dapper的基本使用

[复制链接]
  • TA的每日心情
    擦汗
    7 天前
  • 签到天数: 550 天

    [LV.9]以坛为家II

    硕士生

    1万

    主题

    1万

    帖子

    3万

    积分

    Rank: 8Rank: 8

    UID
    15343
    威望
    -561
    贡献
    7964
    在线时间
    245 小时
    注册时间
    2015-10-12
    发表于 2019-8-15 15:13:32 | 显示全部楼层 |阅读模式
    推广者专属福利,新客户无门槛领取总价值高达2775元代金券,每种代金券限量500张,先到先得。

    标签exception   framework   异常   git   except   read   orm   sage   connect   

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

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

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

    • 使用Dapper可以自动进行对象映射!
    • 轻量级,单文件。
    • 支持多数据库。
    • 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);  }}

    后续文章

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

    由于自己的毕设也是用它来写的,所以放出来,可以作为一个实例来参考一下。

    sql server2012 + dapper + asp.net mvc4 + easyUI的药库管理系统,有兴趣的可以star一下哦~



    楼主热帖排行榜
    搜搜吧社区温馨提示:
    搜搜吧(www.sosoba.org)十分重视网络版权及其他知识产权的保护,针对网络侵权采取如下版权政策:
    1、本站有理由相信网友侵犯任何人的版权或作品,(图文,文字,下载,视频,非法传播),本站有权不事先通知即删除涉嫌侵权的作品和内容
    2、本站将采取必要的网络技术手段,确认为侵权作品或内容的用户有权进行警告、屏蔽、删除的行为,尽可能的防止侵权行为的发生
    3、搜搜吧影视资源均收集自互联网,没有提供影片资源存储,也未参与录制上传,若本站收录的资源涉及您的版权或知识产权或其他利益,我们会立即删除
    4、搜搜吧,删帖,投诉,举报,侵权,若本站侵犯您的权益,附上身份及权利证明,请直接发送邮件到 kefu-sosoba@qq.com 我们将在一个工作日内删除
    soso搜搜吧社区是聚合百度搜索,搜狗搜索,360搜索,新闻,教育,站长,广告,娱乐,影视,微信,网盘,营销,手机,汽车,游戏,论坛综合为一体的大型门户社区www.sosoba.org
    关闭

    搜搜吧社区公告上一条 /1 下一条

    Powered by www.sosoba.org X3.4© 2013-2019 搜搜吧社区 小黑屋|手机版|Archiver|地图|关于我们|腾讯云代金券|帮助中心|soso吧社区
    广告服务/项目合作: kefu-sosoba@qq.com  侵权举报邮箱: kefu-sosoba@qq.com  搜搜吧建站时间:创建于2013年07月23日
    免责声明:本站所有的内容均来自互联网以及第三方作者自由发布,版权归原作者版权所有,搜搜吧不承担任何的法律责任,若有侵权请来信告知,我们立即删除!
    本站热搜:搜搜吧,搜搜,搜搜网,搜一下,搜吧,soso,sousou,快搜,soso搜搜,好搜,搜索,soso问问,搜搜问问,搜搜小说,搜搜图片,搜狗搜索,微信搜索,图片搜索,百度搜索,手机搜索,网盘搜索

    GMT+8, 2019-10-21 07:50 , Processed in 1.093750 second(s), 10 queries , Gzip On, MemCache On.

    快速回复 返回顶部 返回列表