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は遅延負荷を表します.ここでは無視します.)
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# "});
udatestring query = "UPDATE Book SET Name=@name WHERE id =@id";
conn.Execute(query, book);
deletestring 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);
}
}