EF 底層封裝方法(供參考)


閑暇之余,整理了一下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

    }
}

 


免責聲明!

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



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