平台之大勢何人能擋? 帶着你的Net飛奔吧!http://www.cnblogs.com/dunitian/p/4822808.html#skill
上一篇文章:Dapper逆天入門~強類型,動態類型,多映射,多返回值,增刪改查+存儲過程+事物案例演示
官方地址:https://github.com/StackExchange/dapper-dot-net/tree/master/Dapper.Contrib
實戰案例:https://github.com/dunitian/LoTCode/tree/master/PawChina(更新ing)
注意點:Model里面的Table和Key是Dapper.Contrib.Extensions命名空間下的~~~~如果不是~~請看下篇文章(點我)

用法很簡單,貼一下幫助類:
/// <summary>
/// 擴展方法
/// </summary>
public abstract partial class DapperDataAsync
{
#region 查詢系
/// <summary>
/// 獲取Model-Key為int類型
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="id"></param>
/// <param name="transaction"></param>
/// <param name="commandTimeout"></param>
/// <returns></returns>
public static async Task<T> GetAsync<T>(int id, IDbTransaction transaction = null, int? commandTimeout = null) where T : class, new()
{
using (var conn = ConnFactory.GetConnection())
{
return await conn.GetAsync<T>(id, transaction, commandTimeout);
}
}
/// <summary>
/// 獲取Model-Key為long類型
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="id"></param>
/// <param name="transaction"></param>
/// <param name="commandTimeout"></param>
/// <returns></returns>
public static async Task<T> GetAsync<T>(long id, IDbTransaction transaction = null, int? commandTimeout = null) where T : class, new()
{
using (var conn = ConnFactory.GetConnection())
{
return await conn.GetAsync<T>(id, transaction, commandTimeout);
}
}
/// <summary>
/// 獲取Model-Key為Guid類型
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="id"></param>
/// <param name="transaction"></param>
/// <param name="commandTimeout"></param>
/// <returns></returns>
public static async Task<T> GetAsync<T>(System.Guid id, IDbTransaction transaction = null, int? commandTimeout = null) where T : class, new()
{
using (var conn = ConnFactory.GetConnection())
{
return await conn.GetAsync<T>(id, transaction, commandTimeout);
}
}
/// <summary>
/// 獲取Model-Key為string類型
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="id"></param>
/// <param name="transaction"></param>
/// <param name="commandTimeout"></param>
/// <returns></returns>
public static async Task<T> GetAsync<T>(string id, IDbTransaction transaction = null, int? commandTimeout = null) where T : class, new()
{
using (var conn = ConnFactory.GetConnection())
{
return await conn.GetAsync<T>(id, transaction, commandTimeout);
}
}
/// <summary>
/// 獲取Model集合(沒有Where條件)
/// </summary>
/// <typeparam name="T"></typeparam>
/// <returns></returns>
public static async Task<IEnumerable<T>> GetAllAsync<T>() where T : class, new()
{
using (var conn = ConnFactory.GetConnection())
{
return await conn.GetAllAsync<T>();
}
}
#endregion
#region 增刪改
/// <summary>
/// 插入一個Model
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="model"></param>
/// <param name="transaction"></param>
/// <param name="commandTimeout"></param>
/// <param name="sqlAdapter"></param>
/// <returns></returns>
public static async Task<int> InsertAsync<T>(T model, IDbTransaction transaction = null, int? commandTimeout = null) where T : class, new()
{
using (var conn = ConnFactory.GetConnection())
{
return await conn.InsertAsync<T>(model, transaction, commandTimeout);
}
}
/// <summary>
/// 更新一個Model
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="connection"></param>
/// <param name="entityToUpdate"></param>
/// <param name="transaction"></param>
/// <param name="commandTimeout"></param>
/// <returns></returns>
public static async Task<T> UpdateAsync<T>(T model, IDbTransaction transaction = null, int? commandTimeout = null) where T : class, new()
{
using (var conn = ConnFactory.GetConnection())
{
bool b = await conn.UpdateAsync<T>(model, transaction, commandTimeout);
if (b) { return model; }
else { return null; }
}
}
#endregion
#region 分頁查詢
/// <summary>
/// 分頁查詢(為什么不用out,請參考:http://www.cnblogs.com/dunitian/p/5556909.html)
/// </summary>
/// <param name="sql">查詢語句</param>
/// <param name="p">動態參數</param>
/// <param name="sqlTotal">total語句</param>
/// <param name="p2">Total動態參數</param>
/// <returns></returns>
public static async Task<string> PageLoadAsync<T>(string sql, object p = null, string sqlTotal = "", object p2 = null)
{
var rows = await QueryAsync<T>(sql.ToString(), p);
var total = rows.Count();
if (!sqlTotal.IsNullOrWhiteSpace()) { total = await ExecuteScalarAsync<int>(sqlTotal, p2); }
return new { rows = rows, total = total }.ObjectToJson();
}
#endregion
}
