dapper的Dapper-Extensions用法(一)


dapper的Dapper-Extensions用法(一)

Dapper-Extensions

Dapper Extensions is a small library that complements Dapper by adding basic CRUD operations (Get, Insert, Update, Delete) for your POCOs. For more advanced querying scenarios, Dapper Extensions provides a predicate system. The goal of this library is to keep your POCOs pure by not requiring any attributes or base class inheritance.

github:https://github.com/tmsmith/Dapper-Extensions

  • Dapper是一個開源輕的量級的orm,他的優點和用法在之前寫的博客中有提到。可是它只支持帶sql語句的CRUD。
  • Dapper-Extensions也是一個開源庫,他在Dapper的基礎上封裝了基本的CRUD操作,使得一些簡單的數據庫操作可以不用自己寫sql語句。使用起來更方面。

下面是對他的用法的描述,也就是對項目文檔的翻譯。如果讀者英文不錯可以直接看原版文檔,見github。

Introduction

Dapper Extensions是github上的一個開源庫是對StackOVerflow開發的Dapper ORM的一個擴展。它增加了基礎的CRUD操作((Get, Insert, Update, Delete)),對更高級的查詢場景,該類庫還提供了一套謂詞系統。它的目標是保持POCOs的純凈,不需要額外的attributes和類的繼承。

自定義映射請參見 ClassMapper

Features

  • 零配置
  • 自動映射POCOs的CRUD操作
  • GetList, Count等方法可以用於更高級的場景。
  • GetPage for returning paged result sets.支持分頁
  • 自動支持Guid和Integer類型的主鍵,(也可以手動指定其他鍵類型)
  • 通過使用ClassMapper可以使保證POCOs純凈。 (Attribute Free!)
  • 可以通過使用ClassMapper來自定義entity-table映射
  • 支持混合主鍵
  • POCO類名默認與數據表名相匹配,也可以自定義
  • 易於使用的 Predicate System適用於高級場合
  • 在生成SQL語句時正確轉義表名和類名 (Ex: SELECT FirstName FROM Users WHERE Users.UserId = @ UserId_0)
  • 覆蓋單元測試(覆蓋了150+個單元測試)

Naming Conventions(命名約定)

  • POCO類名與數據庫中表名匹配,多元化(Pluralized)的表名(暫時理解為別名吧)可以通過PlurizedAutoClassMapper來自定義。
  • POCO類中屬性名和數據庫表中的類名匹配。
  • 暫約定主鍵被命名為Id.使用其他主鍵需要自定義映射(ClassMapper)。

Installation

Nuget:
http://nuget.org/List/Packages/DapperExtensions

PM> Install-Package DapperExtensions

Examples

pernson POCO的定義

public class Person { public int Id { get; set; } public string FirstName { get; set; } public string LastName { get; set; } public bool Active { get; set; } public DateTime DateCreated { get; set; } }

Get Operation

using (SqlConnection cn = new SqlConnection(_connectionString)) { cn.Open(); int personId = 1; Person person = cn.Get<Person>(personId); cn.Close(); } 

Simple Insert Operation

using (SqlConnection cn = new SqlConnection(_connectionString)) { cn.Open(); Person person = new Person { FirstName = "Foo", LastName = "Bar" }; int id = cn.Insert(person); cn.Close(); }

Advanced Insert Operation (Composite Key)復合主鍵

//返回dynamic類型,若主鍵為單,返回主鍵值,若主鍵為復合的,返回IDictionary<string,object> public static dynamic Insert<T>(this IDbConnection connection, T entity, IDbTransaction transaction = null, int? commandTimeout = null) where T : class
public class Car { public int ModelId { get; set; } public int Year { get; set; } public string Color { get; set; } } using (SqlConnection cn = new SqlConnection(_connectionString)) { cn.Open(); Car car = new Car { Color = "Red" }; //返回o var multiKey = cn.Insert(car); cn.Close(); int modelId = multiKey.ModelId; int year = multiKey.Year; }

Simple Update Operation

using (SqlConnection cn = new SqlConnection(_connectionString)) { cn.Open(); int personId = 1; Person person = _connection.Get<Person>(personId); person.LastName = "Baz"; cn.Update(person); cn.Close(); }

Simple Delete Operation

using (SqlConnection cn = new SqlConnection(_connectionString)) { cn.Open(); Person person = _connection.Get<Person>(1); cn.Delete(person); cn.Close(); }

GetList Operation (with Predicates)

using (SqlConnection cn = new SqlConnection(_connectionString)) { cn.Open(); var predicate = Predicates.Field<Person>(f => f.Active, Operator.Eq, true); IEnumerable<Person> list = cn.GetList<Person>(predicate); cn.Close(); }

Generated SQL

SELECT [Person].[Id] , [Person].[FirstName] , [Person].[LastName] , [Person].[Active] , [Person].[DateCreated] FROM [Person] WHERE ([Person].[Active] = @Active_0)

Count Operation (with Predicates)

using (SqlConnection cn = new SqlConnection(_connectionString)) { cn.Open(); var predicate = Predicates.Field<Person>(f => f.DateCreated, Operator.Lt, DateTime.UtcNow.AddDays(-5)); int count = cn.Count<Person>(predicate); cn.Close(); } 

Generated SQL

SELECT COUNT(*) Total FROM [Person] WHERE ([Person].[DateCreated] < @DateCreated_0)

相關博客:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM