閑暇之余,整理了一下EF底層的一些基礎方法,供查看,只有接口,具體實現需要你們自己寫了。
建議:接口的實現定義為虛方法,當父類的方法不滿住子類需求時,可以重寫此方法
此接口都為公用方法,基本上滿足小系統的實際開發需求,如果你覺得滿足不了你,可以擴展此接口。
using System; using System.Collections.Generic; using System.Data; using System.Data.Entity; using System.Data.SqlClient; using System.Linq; using System.Linq.Expressions; using System.Text; using System.Threading.Tasks; namespace Basic.IRepository { public interface ICommonRepository<T> where T : class, new() { #region Other /// <summary> /// 確定序列中的任何元素是否都滿足條件 /// </summary> /// <param name="whereLambda"></param> /// <returns></returns> bool Any(Expression<Func<T, bool>> whereLambda); /// <summary> /// 返回序列中元素的數量 /// </summary> /// <param name="whereLambda"></param> /// <returns></returns> int Count(Expression<Func<T, bool>> whereLambda); /// <summary> /// 返回最大值 /// </summary> /// <typeparam name="Tkey"></typeparam> /// <param name="predicate"></param> /// <param name="selector"></param> /// <returns></returns> Tkey Max<Tkey>(Expression<Func<T, bool>> whereLambda, Func<T, Tkey> selector); /// <summary> /// 返回分組查詢的數量 /// </summary> /// <typeparam name="TKey"></typeparam> /// <param name="whereLambda"></param> /// <param name="groupBy"></param> /// <returns></returns> IDictionary<TKey, int> Count<TKey>(Expression<Func<T, bool>> whereLambda, Expression<Func<T, TKey>> groupBy); /// <summary> /// 分組求和 /// </summary> /// <typeparam name="TKey"></typeparam> /// <param name="whereLambda"></param> /// <param name="groupBy"></param> /// <param name="selector"></param> /// <returns></returns> IDictionary<TKey, decimal> Sum<TKey>(Expression<Func<T, bool>> whereLambda, Expression<Func<T, TKey>> groupBy, Func<T, decimal> selector); /// <summary> /// 獲取表名 /// </summary> /// <param name="type"></param> /// <returns></returns> string GetTableName(Type type); /// <summary> /// 得到SqlServer 表相關信息(字段名,類型.....) /// </summary> /// <param name="tableName"></param> /// <returns></returns> IEnumerable<SqlServerColumnModel> GetSqlServerTableOrViewColumns(string tableName); /// <summary> /// 得到MySql 表相關信息(字段名,類型.....) /// </summary> /// <param name="tableName"></param> /// <returns></returns> IEnumerable<MySqlColumnModel> GetMySqlTableOrViewColumns(string tableName); #endregion #region Insert /// <summary> /// 添加 /// </summary> /// <param name="model"></param> /// <returns></returns> bool Add(T model); /// <summary> /// 批量添加 /// </summary> /// <param name="model"></param> /// <returns></returns> bool AddRange(IEnumerable<T> model); /// <summary> /// 批量添加 生成Sql執行 /// </summary> /// <param name="model"></param> /// <param name="clearHistoryData"></param> void BulkInsertToSql(IEnumerable<T> model, bool clearHistoryData = false); /// <summary> /// 批量添加 SqlServer /// 通過 SqlBulkCopy 實現 /// </summary> /// <param name="model"></param> /// <param name="clearHistoryData"></param> void BulkInsertSqlServer(IEnumerable<T> model, bool clearHistoryData = false); /// <summary> /// 批量添加 MySql /// 通過 MySqlBulkLoader 實現 /// </summary> /// <param name="model"></param> /// <param name="clearHistoryData"></param> int BulkInsertMySql(IEnumerable<T> model, string csvPath, bool clearHistoryData = false); #endregion #region Delete /// <summary> /// 按主鍵刪除 /// </summary> /// <param name="id"></param> bool DeleteById(dynamic id); /// <summary> /// 刪除 /// </summary> /// <param name="model"></param> /// <returns></returns> bool Delete(T model); /// <summary> /// 按條件刪除 /// </summary> /// <param name="id"></param> bool DeleteByWhere(Expression<Func<T, bool>> whereLambda); /// <summary> /// 批量刪除 /// </summary> /// <param name="model"></param> /// <returns></returns> bool DeleteRange(IEnumerable<T> model); /// <summary> /// 批量刪除 /// </summary> /// <param name="where">條件:{Name="張三",性別="男"}</param> /// <returns></returns> bool BulkDelete(object where); /// <summary> /// 批量刪除 /// </summary> /// <param name="where">條件:{Name="張三",性別="男"}</param> /// <param name="notWhere">過濾的條件:{Name="張三",年齡="18"}</param> /// <returns></returns> bool BulkDelete(object where,object notWhere); #endregion #region Update /// <summary> /// 更新 /// </summary> /// <param name="model"></param> /// <returns></returns> bool Update(T model); /// <summary> /// 批量更新 /// </summary> /// <param name="model"></param> /// <returns></returns> bool UpdateRange(IEnumerable<T> models); /// <summary> /// 批量更新,不帶條件 /// </summary> /// <param name="set">修改的數據:{Name="張三",年齡=22}</param> /// <returns></returns> bool BulkUpdate(object set); /// <summary> /// 批量更新,帶條件 /// </summary> /// <param name="set">修改的數據:{Name="張三",年齡=22}</param> /// <param name="where">條件:{Name="張三",性別="男"}</param> /// <returns></returns> bool BulkUpdate(object set, object where); #endregion #region Select /// <summary> /// 按主鍵查詢 /// </summary> /// <param name="id">主鍵</param> /// <returns></returns> T Find(dynamic id); /// <summary> /// 通過id查看是否存在 /// </summary> /// <param name="id">主鍵</param> /// <returns></returns> bool IsExist(dynamic id); /// <summary> /// 返回序列中的第一個元素 /// </summary> /// <param name="whereLambda">條件</param> /// <returns></returns> T FirstOrDefault(Expression<Func<T, bool>> whereLambda); /// <summary> /// 獲取數據 /// </summary> /// <typeparam name="TObj">排序類型</typeparam> /// <param name="whereLambda">條件</param> /// <param name="orderBy">排序字段</param> /// <param name="isASC">是否升序</param> /// <returns></returns> IEnumerable<T> Find<TObj>(Expression<Func<T, bool>> whereLambda, Expression<Func<T, TObj>> orderBy, bool isASC = true); /// <summary> /// 獲取數據 /// </summary> /// <typeparam name="TKey">排序類型 1</typeparam> /// <typeparam name="TObj">排序類型 2</typeparam> /// <param name="whereLambda">條件</param> /// <param name="orderBy">排序字段 1</param> /// <param name="thenBy">排序字段 2</param> /// <param name="isASC">是否升序</param> /// <returns></returns> IEnumerable<T> Find<TKey,TObj>(Expression<Func<T, bool>> whereLambda, Expression<Func<T, TKey>> orderBy, Expression<Func<T, TObj>> thenBy, bool isASC = true); /// <summary> /// 分頁查詢 生成SQL執行 SQLSERVER /// </summary> /// <param name="name">表名/視圖</param> /// <param name="where">條件 name='Jamel' and age = 18</param> /// <param name="pageIndex">頁碼</param> /// <param name="pageSize">數量</param> /// <param name="orderBy">排序字段</param> /// <param name="isASC">是否升序</param> /// <returns></returns> IEnumerable<T> PagerToSqlServer(string name, string where, int pageIndex, int pageSize, object orderBy, bool isASC = true); /// <summary> /// 分頁查詢 生成SQL執行 MYSQL /// </summary> /// <param name="name">表名/視圖</param> /// <param name="where">條件 name='Jamel' and age = 18</param> /// <param name="pageIndex">頁碼</param> /// <param name="pageSize">數量</param> /// <param name="orderBy">排序字段</param> /// <param name="isASC">是否升序</param> /// <returns></returns> IEnumerable<T> PagerToMySql(string name, string where, int pageIndex, int pageSize, object orderBy, bool isASC = true); /// <summary> /// 分頁查詢 /// </summary> /// <typeparam name="TObj">排序類型</typeparam> /// <param name="whereLambda">條件</param> /// <param name="orderBy">排序字段</param> /// <param name="pageIndex">頁碼</param> /// <param name="pageSize">數量</param> /// <param name="isASC">是否升序</param> /// <returns></returns> IEnumerable<T> Pager<TObj>(Expression<Func<T, bool>> whereLambda, Expression<Func<T, TObj>> orderBy, int pageIndex,int pageSize, bool isASC = true); /// <summary> /// 分頁查詢 /// </summary> /// <typeparam name="TKey">排序類型 1</typeparam> /// <typeparam name="TObj">排序類型 2</typeparam> /// <param name="whereLambda">條件</param> /// <param name="orderBy">排序字段 1</param> /// <param name="thenBy">排序字段 2</param> /// <param name="pageIndex">頁碼</param> /// <param name="pageSize">數量</param> /// <param name="isASC">是否升序</param> /// <returns></returns> IEnumerable<T> Pager<TKey, TObj>(Expression<Func<T, bool>> whereLambda, Expression<Func<T, TKey>> orderBy, Expression<Func<T, TObj>> thenBy, int pageIndex, int pageSize, bool isASC = true); #endregion #region Proc /// <summary> /// 執行存儲過程或自定義sql語句--返回集合(自定義返回類型) /// SqlServer: exec getActionUrlId @name,@ID /// MySql: call getActionUrlId(@name,@ID) /// </summary> /// <param name="sql">sql語句或存儲過程</param> /// <param name="parms">參數 new SqlParameter("@name","Jamel")</param> /// <returns></returns> IEnumerable<T> SqlQuery(string sql, IEnumerable<SqlParameter> parms); /// <summary> /// 自定義語句和存儲過程的增刪改--返回影響的行數 /// SqlServer: exec getActionUrlId @name,@ID /// MySql: call getActionUrlId(@name,@ID) /// </summary> /// <param name="sql">sql語句或存儲過程</param> /// <param name="parms">參數 new SqlParameter("@name","Jamel")</param> /// <returns></returns> int ExecuteSqlCommand(string sql, IEnumerable<SqlParameter> parms); #endregion } }