Dapper使用


DapperはNETの次のmicroのORMで、Entity FraameweorkやNhibnateとは違って、ライト級に属しています.しかも半自動です.つまり実体類は自分で書くということです.複雑な配置ファイルがありません.単一ファイルでいいです.公式アドレスを指定します.
http://code.google.com/p/dapper-dot-net/
彼はとても使いやすいと思います.今はもう元のSql Helperに取って代わりました.利点:
Dapperを使って自動的にオブジェクトマッピングができます.ライト級の書類.複数のデータベースをサポートします.Dapper原理は、EmitがIDaReaderのシーケンス列を反射することにより、オブジェクトを迅速に取得し、生成する.ネット上にはDapperに対する拡張類があります.ここでは詳しく説明しません.以下は簡単な添削調査、データベーステーブル間の対応関係と事務の応用だけを説明します.
まずエンティティクラスの関係を与えます.
 本と書評は1-nの関係です.(Entity Fraamewarkをそのまま使用するエンティティ類で、virtualは遅延負荷を表します.ここでは無視します.)
// 
public class Book
    {
        public Book()
        {
            Reviews = new List();
        }
        public int Id { get; set; }
        public string Name { get; set; }
        public virtual List 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類への拡張であるため、すべての方法はこの種類の拡張方法である.したがって、使用前にIDBCN nectionオブジェクトを具体化する.
IDbConnection conn = new SqlConnection(connString);
インセンス
 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#   "});
udate
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(query).ToList();

 //      
 string query = "SELECT * FROM Book WHERE id = @id";
 book = conn.Query(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
 var b = conn.Query(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(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);
  }
}