Dapper的基本使用

來源:互聯網
上載者:User

標籤:

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  [email protected] WHERE id [email protected]"; 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 FORM 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的基本使用

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.