輕量型ORM框架Dapper的使用
/// <summary>
/// 查詢操作
/// </summary>
/// <typeparam name="T">返回集合的類型</typeparam>
/// <param name="sql">sql語句</param>
/// <param name="param">參數化值</param>
/// <returns></returns>
public IEnumerable<T> Query<T>(string sql, object param)
{
IEnumerable<T> _list = default(IEnumerable<T>);
if (!string.IsNullOrEmpty(sql))
{
try
{
_list = DbConnection.Query<T>(sql, param);
}
catch { }
}
return _list;
}
/// <summary>
/// 執行存儲過程查詢操作
/// </summary>
/// <typeparam name="T">返回集合的類型</typeparam>
/// <param name="storedName">存儲過程</param>
/// <param name="param">參數化值</param>
/// <returns></returns>
public IEnumerable<T> QueryStored<T>(string storedName, object param)
{
IEnumerable<T> _list = default(IEnumerable<T>);
if (!string.IsNullOrEmpty(storedName))
{
try
{
_list = DbConnection.Query<T>(storedName,commandType: CommandType.StoredProcedure);
}
catch { }
}
return _list;
}
/// <summary>
/// 查詢操作返回默認第一條數據(如返回null則創建默認類型)
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="sql"></param>
/// <param name="param"></param>
/// <returns></returns>
public T FirstOrDefault<T>(string sql, object param)
{
var model = default(T);
if (!string.IsNullOrEmpty(sql))
{
try
{
model = DbConnection.Query<T>(sql, param).FirstOrDefault();
}
catch { }
}
return model == null ? Activator.CreateInstance<T>() : model;
}
/// <summary>
/// 查詢一組SQL語句並返回值
/// </summary>
/// <typeparam name="T1">第一條語句返回集合類型</typeparam>
/// <typeparam name="T2">第二條語句返回集合類型</typeparam>
/// <param name="sql">sql語句</param>
/// <param name="param">參數化值</param>
/// <returns></returns>
public Tuple<IEnumerable<T1>, IEnumerable<T2>> Query<T1, T2>(string sql, object param)
{
IEnumerable<T1> _item1 = null; IEnumerable<T2> _item2 = null;
if (!string.IsNullOrEmpty(sql))
{
try
{
using (var multi = DbConnection.QueryMultiple(sql, param))
{
_item1 = multi.Read<T1>();
_item2 = multi.Read<T2>();
}
}
catch { }
}
return Tuple.Create<IEnumerable<T1>, IEnumerable<T2>>(_item1, _item2);
}
/// <summary>
/// 查詢一組SQL語句並返回值
/// </summary>
/// <typeparam name="T1">第一條語句返回集合類型</typeparam>
/// <typeparam name="T2">第二條語句返回集合類型</typeparam>
/// <typeparam name="T3">第三條語句返回集合類型</typeparam>
/// <param name="sql">sql語句</param>
/// <param name="param">參數化值</param>
/// <returns></returns>
public Tuple<IEnumerable<T1>, IEnumerable<T2>, IEnumerable<T3>> Query<T1, T2, T3>(string sql, object param)
{
IEnumerable<T1> _item1 = null; IEnumerable<T2> _item2 = null; IEnumerable<T3> _item3 = null;
if (!string.IsNullOrEmpty(sql))
{
try
{
using (var multi = DbConnection.QueryMultiple(sql, param))
{
_item1 = multi.Read<T1>();
_item2 = multi.Read<T2>();
_item3 = multi.Read<T3>();
}
}
catch { }
}
return Tuple.Create<IEnumerable<T1>, IEnumerable<T2>, IEnumerable<T3>>(_item1, _item2, _item3);
}
public void Dispose()
{
if (dbConnection != null)
{
try
{
bool isClosed = dbConnection.State == ConnectionState.Closed;
if (!isClosed) dbConnection.Close();
//dbConnection.Dispose();
}
catch { }
}
}
}
調用示例如下:
public abstract class BaseProvide
{
public Lazy<LiunianContext> lazyContext;
protected LiunianContextDb
{
get
{
return lazyContext.Value;
}
}
}
public class EmployeeProvide : BaseProvide
{
/// <summary>
/// 獲取數據
/// </summary>
/// <returns></returns>
public List<Employee> ListEmployeeByParam(int[] param)
{
string sql = "select * from Employee where ID in @Ids";
return Db.Query<Employee>(sql, new { Ids = param }).ToList();
}
/// <summary>
/// 獲取全部數據
/// </summary>
/// <returns></returns>
public List<Employee> ListEmployee()
{
string sql = "select * from Employee";
return Db.Query<Employee>(sql,null).ToList();
}
/// <summary>
/// 查詢單個實體
/// </summary>
/// <param name="Id"></param>
/// <returns></returns>
public Employee loadEmployee(int Id)
{
string sql = "select * from Employee where ID= @Id";
return Db.FirstOrDefault<Employee>(sql, new { Id = Id });
}
/// <summary>
/// 插入操作
/// </summary>
/// <param name="model"></param>
/// <returns></returns>
public bool InsertEmployee(Employee model)
{
StringBuilder sql = new StringBuilder();
sql.Append("insert into Employee values (@UpdateTime,@CreateTime,@State,@LoginName,@UserName,");
sql.Append("@RoleId,@IsUse)");
return Db.Execute(sql.ToString(), model);
}
/// <summary>
/// 更新操作
/// </summary>
/// <param name="model"></param>
/// <returns></returns>
public bool UpdateEmployee(Employee model)
{
StringBuilder sql = new StringBuilder();
sql.Append("update Employee set UpdateTime = @UpdateTime where ID = @ID");
return Db.Execute(sql.ToString(), model);
}
/// <summary>
/// 刪除操作
/// </summary>
/// <param name="Id"></param>
/// <returns></returns>
public bool DeleteEmployeeById(int Id)
{
string sql = "delete from Employee where ID = @Id";
return Db.Execute(sql.ToString(), new { Id = Id });
}
/// <summary>
/// 執行多個語句返回多個結果
/// </summary>
/// <param name="Id"></param>
/// <returns></returns>
public Tuple<int,IEnumerable<Employee>> ListGroupEmployee()
{
string sql = "select Count(*) from Employee select * from Employee";
Tuple<IEnumerable<int>, IEnumerable<Employee>> queryGroup = Db.Query<int, Employee>(sql, null);
return Tuple.Create<int, IEnumerable<Employee>>(queryGroup.Item1.FirstOrDefault(),queryGroup.Item2);
}
}
除了沒把事務加上之外其他的增刪改查都有了,同時在傳對象的時候Dapper也解決了sql注入的問題,在性能上也是比較好的ORM框架,需要的拿去!

