Entity FrameWork 6幫助類

来源:http://www.cnblogs.com/slnzl/archive/2016/12/17/6189069.html
-Advertisement-
Play Games

1 public class BaseDAL 2 { 3 string strConn = ""; 4 public BaseDAL(string connString) 5 { 6 strConn = connString; 7 } 8 9 #region 通用增刪改查 10 #re... ...


  1 public class BaseDAL
  2     {
  3     string strConn = "";
  4     public BaseDAL(string connString)
  5     {
  6         strConn = connString;
  7     }
  8 
  9     #region 通用增刪改查
 10     #region 非原始sql語句方式
 11     /// <summary>
 12     /// 新增
 13     /// </summary>
 14     /// <param name="entity">實體</param>
 15     /// <returns>返回受影響行數</returns>
 16     public bool Add<T>(T entity) where T : class
 17     {
 18         using (SysDb<T> db = new SysDb<T>(strConn))
 19         {
 20         db.Entry<T>(entity).State = EntityState.Added;
 21         return db.SaveChanges() > 0;
 22         }
 23     }
 24 
 25     /// <summary>
 26     /// 修改
 27     /// </summary>
 28     /// <param name="entity">實體</param>
 29     /// <returns>返回受影響行數</returns>
 30     public bool Update<T>(T entity) where T : class
 31     {
 32         using (SysDb<T> db = new SysDb<T>(strConn))
 33         {
 34         db.Set<T>().Attach(entity);
 35         db.Entry<T>(entity).State = EntityState.Modified;
 36         return db.SaveChanges() > 0;
 37         }
 38     }
 39 
 40     /// <summary>
 41     /// 刪除
 42     /// </summary>
 43     /// <param name="entity">實體</param>
 44     /// <returns>返回受影響行數</returns>
 45     public bool Delete<T>(T entity) where T : class
 46     {
 47         using (SysDb<T> db = new SysDb<T>(strConn))
 48         {
 49         db.Set<T>().Attach(entity);
 50         db.Entry<T>(entity).State = EntityState.Deleted;
 51         return db.SaveChanges() > 0;
 52         }
 53     }
 54 
 55     /// <summary>
 56     /// 根據條件刪除
 57     /// </summary>
 58     /// <param name="deleWhere">刪除條件</param>
 59     /// <returns>返回受影響行數</returns>
 60     public bool DeleteByConditon<T>(Expression<Func<T, bool>> deleWhere) where T : class
 61     {
 62         using (SysDb<T> db = new SysDb<T>(strConn))
 63         {
 64         List<T> entitys = db.Set<T>().Where(deleWhere).ToList();
 65         entitys.ForEach(m => db.Entry<T>(m).State = EntityState.Deleted);
 66         return db.SaveChanges() > 0;
 67         }
 68     }
 69 
 70     /// <summary>
 71     /// 查找單個
 72     /// </summary>
 73     /// <param name="id">主鍵</param>
 74     /// <returns></returns>
 75     public T GetSingleById<T>(int id) where T : class
 76     {
 77         using (SysDb<T> db = new SysDb<T>(strConn))
 78         {
 79         return db.Set<T>().Find(id);
 80         }
 81     }
 82 
 83     /// <summary>
 84     /// 查找單個
 85     /// </summary>
 86     /// <param name="seleWhere">查詢條件</param>
 87     /// <returns></returns>
 88     public T GetSingle<T>(Expression<Func<T, bool>> seleWhere) where T : class
 89     {
 90         using (SysDb<T> db = new SysDb<T>(strConn))
 91         {
 92         return db.Set<T>().AsExpandable().FirstOrDefault(seleWhere);
 93         }
 94     }
 95 
 96     /// <summary>
 97     /// 獲取所有實體集合
 98     /// </summary>
 99     /// <returns></returns>
100     public List<T> GetAll<T>() where T : class
101     {
102         using (SysDb<T> db = new SysDb<T>(strConn))
103         {
104         return db.Set<T>().AsExpandable().ToList<T>();
105         }
106     }
107 
108     /// <summary>
109     /// 獲取所有實體集合(單個排序)
110     /// </summary>
111     /// <returns></returns>
112     public List<T> GetAll<T, Tkey>(Expression<Func<T, Tkey>> orderWhere, bool isDesc) where T : class
113     {
114         using (SysDb<T> db = new SysDb<T>(strConn))
115         {
116         return CommonSort(db.Set<T>().AsExpandable(), orderWhere, isDesc).ToList<T>();
117         }
118     }
119 
120     /// <summary>
121     /// 獲取所有實體集合(多個排序)
122     /// </summary>
123     /// <returns></returns>
124     public List<T> GetAll<T>(params OrderModelField[] orderByExpression) where T : class
125     {
126         using (SysDb<T> db = new SysDb<T>(strConn))
127         {
128         return CommonSort(db.Set<T>().AsExpandable(), orderByExpression).ToList();
129         }
130     }
131 
132     /// <summary>
133     /// 單個排序通用方法
134     /// </summary>
135     /// <typeparam name="Tkey">排序欄位</typeparam>
136     /// <param name="data">要排序的數據</param>
137     /// <param name="orderWhere">排序條件</param>
138     /// <param name="isDesc">是否倒序</param>
139     /// <returns>排序後的集合</returns>
140     public IQueryable<T> CommonSort<T, Tkey>(IQueryable<T> data, Expression<Func<T, Tkey>> orderWhere, bool isDesc) where T : class
141     {
142         if (isDesc)
143         {
144         return data.OrderByDescending(orderWhere);
145         }
146         else
147         {
148         return data.OrderBy(orderWhere);
149         }
150     }
151 
152     /// <summary>
153     /// 多個排序通用方法
154     /// </summary>
155     /// <typeparam name="Tkey">排序欄位</typeparam>
156     /// <param name="data">要排序的數據</param>
157     /// <param name="orderWhereAndIsDesc">字典集合(排序條件,是否倒序)</param>
158     /// <returns>排序後的集合</returns>
159     public IQueryable<T> CommonSort<T>(IQueryable<T> data, params OrderModelField[] orderByExpression) where T : class
160     {
161         //創建表達式變數參數
162         var parameter = Expression.Parameter(typeof(T), "o");
163 
164         if (orderByExpression != null && orderByExpression.Length > 0)
165         {
166         for (int i = 0; i < orderByExpression.Length; i++)
167         {
168             //根據屬性名獲取屬性
169             var property = typeof(T).GetProperty(orderByExpression[i].PropertyName);
170             //創建一個訪問屬性的表達式
171             var propertyAccess = Expression.MakeMemberAccess(parameter, property);
172             var orderByExp = Expression.Lambda(propertyAccess, parameter);
173 
174             string OrderName = "";
175             if (i > 0)
176             {
177             OrderName = orderByExpression[i].IsDESC ? "ThenByDescending" : "ThenBy";
178             }
179             else
180             OrderName = orderByExpression[i].IsDESC ? "OrderByDescending" : "OrderBy";
181 
182             MethodCallExpression resultExp = Expression.Call(typeof(Queryable), OrderName, new Type[] { typeof(T), property.PropertyType },
183             data.Expression, Expression.Quote(orderByExp));
184 
185             data = data.Provider.CreateQuery<T>(resultExp);
186         }
187         }
188         return data;
189     }
190 
191     /// <summary>
192     /// 根據條件查詢實體集合
193     /// </summary>
194     /// <param name="seleWhere">查詢條件 lambel表達式</param>
195     /// <returns></returns>
196     public List<T> GetList<T>(Expression<Func<T, bool>> seleWhere) where T : class
197     {
198         using (SysDb<T> db = new SysDb<T>(strConn))
199         {
200         return db.Set<T>().AsExpandable().Where(seleWhere).ToList();
201         }
202     }
203 
204     /// <summary>
205     /// 根據條件查詢實體集合
206     /// </summary>
207     /// <param name="seleWhere">查詢條件 lambel表達式</param>
208     /// <returns></returns>
209     public List<T> GetList<T, TValue>(Expression<Func<T, TValue>> seleWhere, IEnumerable<TValue> conditions) where T : class
210     {
211         using (SysDb<T> db = new SysDb<T>(strConn))
212         {
213 
214         return db.Set<T>().AsExpandable().WhereIn<T, TValue>(seleWhere, conditions).ToList();
215         }
216     }
217 
218     /// <summary>
219     /// 根據條件查詢實體集合(單個欄位排序)
220     /// </summary>
221     /// <param name="seleWhere">查詢條件 lambel表達式</param>
222     /// <returns></returns>
223     public List<T> GetList<T, Tkey>(Expression<Func<T, bool>> seleWhere, Expression<Func<T, Tkey>> orderWhere, bool isDesc) where T : class
224     {
225         using (SysDb<T> db = new SysDb<T>(strConn))
226         {
227         return CommonSort(db.Set<T>().AsExpandable().Where(seleWhere), orderWhere, isDesc).ToList();
228         }
229     }
230 
231     /// <summary>
232     /// 根據條件查詢實體集合(多個欄位排序)
233     /// </summary>
234     /// <param name="seleWhere">查詢條件 lambel表達式</param>
235     /// <returns></returns>
236     public List<T> GetList<T>(Expression<Func<T, bool>> seleWhere, params OrderModelField[] orderByExpression) where T : class
237     {
238         using (SysDb<T> db = new SysDb<T>(strConn))
239         {
240         return CommonSort(db.Set<T>().AsExpandable().Where(seleWhere), orderByExpression).ToList();
241         }
242     }
243 
244     /// <summary>
245     /// 獲取分頁集合(無條件無排序)
246     /// </summary>
247     /// <returns></returns>
248     public List<T> GetListPaged<T, Tkey>(int pageIndex, int pageSize, out int totalcount) where T : class
249     {
250         using (SysDb<T> db = new SysDb<T>(strConn))
251         {
252         totalcount = db.Set<T>().AsExpandable().Count();//獲取總數
253         //需要增加AsExpandable(),否則查詢的是所有數據到記憶體,然後再排序  AsExpandable是linqkit.dll中的方法
254         return db.Set<T>().AsExpandable().Skip((pageIndex - 1) * pageSize).Take(pageSize).ToList();
255         }
256     }
257 
258     /// <summary>
259     /// 獲取分頁集合(無條件單個排序)
260     /// </summary>
261     /// <returns></returns>
262     public List<T> GetListPaged<T, Tkey>(int pageIndex, int pageSize, Expression<Func<T, Tkey>> orderWhere, bool isDesc, out int totalcount) where T : class
263     {
264         using (SysDb<T> db = new SysDb<T>(strConn))
265         {
266         totalcount = db.Set<T>().AsExpandable().Count();//獲取總數
267         //需要增加AsExpandable(),否則查詢的是所有數據到記憶體,然後再排序  AsExpandable是linqkit.dll中的方法
268         return CommonSort(db.Set<T>().AsExpandable(), orderWhere, isDesc).Skip((pageIndex - 1) * pageSize).Take(pageSize).ToList();
269         }
270     }
271 
272     /// <summary>
273     /// 獲取分頁集合(無條件多欄位排序)
274     /// </summary>
275     /// <returns></returns>
276     public List<T> GetListPaged<T>(int pageIndex, int pageSize, out int totalcount, params OrderModelField[] orderByExpression) where T : class
277     {
278         using (SysDb<T> db = new SysDb<T>(strConn))
279         {
280         totalcount = db.Set<T>().AsExpandable().Count();//獲取總數
281         //需要增加AsExpandable(),否則查詢的是所有數據到記憶體,然後再排序  AsExpandable是linqkit.dll中的方法
282         return CommonSort(db.Set<T>().AsExpandable(), orderByExpression).Skip((pageIndex - 1) * pageSize).Take(pageSize).ToList();
283         }
284     }
285 
286     /// <summary>
287     /// 獲取分頁集合(有條件無排序)
288     /// </summary>
289     /// <returns></returns>
290     public List<T> GetListPaged<T, Tkey>(int pageIndex, int pageSize, Expression<Func<T, bool>> seleWhere, out int totalcount) where T : class
291     {
292         using (SysDb<T> db = new SysDb<T>(strConn))
293         {
294         totalcount = db.Set<T>().AsExpandable().Where(seleWhere).Count();//獲取總數
295         //需要增加AsExpandable(),否則查詢的是所有數據到記憶體,然後再排序  AsExpandable是linqkit.dll中的方法
296         return db.Set<T>().AsExpandable().Where(seleWhere).Skip((pageIndex - 1) * pageSize).Take(pageSize).ToList();
297         }
298     }
299 
300     /// <summary>
301     /// 獲取分頁集合(有條件單個排序)
302     /// </summary>
303     /// <returns></returns>
304     public List<T> GetListPaged<T, Tkey>(int pageIndex, int pageSize, Expression<Func<T, bool>> seleWhere,
305         Expression<Func<T, Tkey>> orderWhere, bool isDesc, out int totalcount) where T : class
306     {
307         using (SysDb<T> db = new SysDb<T>(strConn))
308         {
309         totalcount = db.Set<T>().AsExpandable().Where(seleWhere).Count();//獲取總數
310         //需要增加AsExpandable(),否則查詢的是所有數據到記憶體,然後再排序  AsExpandable是linqkit.dll中的方法
311         return CommonSort(db.Set<T>().AsExpandable().Where(seleWhere), orderWhere, isDesc).Skip((pageIndex - 1) * pageSize).Take(pageSize).ToList();
312         }
313     }
314 
315     /// <summary>
316     /// 獲取分頁集合(有條件多欄位排序)
317     /// </summary>
318     /// <returns></returns>
319     public List<T> GetListPaged<T>(int pageIndex, int pageSize, Expression<Func<T, bool>> seleWhere,
320         out int totalcount, params OrderModelField[] orderModelFiled) where T : class
321     {
322         using (SysDb<T> db = new SysDb<T>(strConn))
323         {
324         totalcount = db.Set<T>().AsExpandable().Where(seleWhere).Count();//獲取總數
325         //需要增加AsExpandable(),否則查詢的是所有數據到記憶體,然後再排序  AsExpandable是linqkit.dll中的方法
326         return CommonSort(db.Set<T>().AsExpandable().Where(seleWhere), orderModelFiled).Skip((pageIndex - 1) * pageSize).Take(pageSize).ToList();
327         }
328     }
329     #endregion
330 
331     #region 原始sql操作
332     /// <summary>
333     /// 執行操作
334     /// </summary>
335     /// <param name="sql"></param>
336     /// <param name="paras"></param>
337     public void ExecuteSql(string sql, params object[] paras)
338     {
339         using (SysDb db = new SysDb(strConn))
340         {
341         db.Database.ExecuteSqlCommand(sql, paras);
342         }
343     }
344 
345     /// <summary>
346     /// 查詢列表
347     /// </summary>
348     /// <typeparam name="T"></typeparam>
349     /// <param name="sql"></param>
350     /// <param name="paras"></param>
351     /// <returns></returns>
352     public List<T> QueryList<T>(string sql, params object[] paras) where T : class
353     {
354         using (SysDb db = new SysDb(strConn))
355         {
356         return db.Database.SqlQuery<T>(sql, paras).ToList();
357         }
358     }
359 
360     /// <summary>
361     /// 查詢單個
362     /// </summary>
363     /// <typeparam name="T"></typeparam>
364     /// <param name="sql"></param>
365     /// <param name="paras"></param>
366     /// <returns></returns>
367     public T QuerySingle<T>(string sql, params object[] paras) where T : class
368     {
369         using (SysDb<T> db = new SysDb<T>(strConn))
370         {
371         return db.Database.SqlQuery<T>(sql, paras).FirstOrDefault();
372         }
373     }
374 
375     /// <summary>
376     /// 執行事務
377     /// </summary>
378     /// <param name="lsSql"></param>
379     /// <param name="lsParas"></param>
380     public void ExecuteTransaction(List<String> lsSql, List<Object[]> lsParas)
381     {
382         using (SysDb db = new SysDb(strConn))
383         {
384         using (var tran = db.Database.BeginTransaction())
385         {
386             try
387             {
388             for (int i = 0; i < lsSql.Count; i++)
389             {
390                 if (lsParas != null && lsParas.Count > 0)
391                 {
392                 db.Database.ExecuteSqlCommand(lsSql[i], lsParas[i]);
393                 }
394             }
395             foreach (String item in lsSql)
396             {
397                 db.Database.ExecuteSqlCommand(item);
398             }
399 
400             tran.Commit();
401             }
402             catch (Exception ex)
403             {
404             tran.Rollback();
405             throw ex;
406             }
407         }
408         }
409     }
410     #endregion
411     #endregion
412 
413     #region 通用屬性
414     /// <summary>
415     /// 獲取資料庫伺服器當前時間。
416     /// </summary>
417     public DateTime ServerTime
418     {
419         get
420         {
421         using (SysDb db = new SysDb(strConn))
422         {
423             String sql = "SELECT GETDATE()";
424             Object objServerTime = db.Database.SqlQuery<Object>(sql);
425             return Convert.ToDateTime(objServerTime);
426         }
427         }
428     }
429 
430     /// <summary>
431     /// 獲取資料庫版本。
432     /// </summary>
433     public String DatabaseVersion
434     {
435         get
436         {
437         using (SysDb db = new SysDb(strConn))
438         {
439             try
440             {
441             String sql = "SELECT Version FROM Sys_Version";
442             Object objServerTime = db.Database.SqlQuery<Object>(sql);
443             return Convert.ToString(objServerTime);
444             }
445         

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 線程池的作用線程池,顧名思義,線程對象池。Task和TPL都有用到線程池,所以瞭解線程池的內幕有助於你寫出更好的程式。由於篇幅有限,在這裡我只講解以下核心概念: 線程池的大小 如何調用線程池添加任務 線程池如何執行任務 Threadpool也支持操控IOCP的線程,但在這裡我們不研究它,和task以 ...
  • 初學者,採用簡單三層架構,本來想用autofac依賴註入,只用sql server,沒打算遷移到別的資料庫,因此,簡單一點,就不用了。先做用戶管理模塊,登錄註冊等,客戶端cooke存儲,利用DESCryptoServiceProvider加密,源代碼下載地址:https://github.com/J ...
  • 最近悟出來一個道理,在這兒分享給大家:學歷代表你的過去,能力代表你的現在,學習代表你的將來。 十年河東十年河西,莫欺少年窮 學無止境,精益求精 C#洗牌演算法如下: 採用的是交換位置法,程式執行54次。效率還是頗高滴! @陳卧龍的博客 ...
  • 一、前言 在WPF編程中,有時候我們使用DataGrid會需要在一個DataColumn中既有TextBox,也要有ComboBox或者TextBlock等其他數據顯示樣式。 這個時候我們就需要DataGridTemplateColumn去自定義我們的Column樣式,通過數據類型去判斷該信息是以T ...
  • 在上一篇多線程(基礎篇2)中,我們主要講述了確定線程的狀態、線程優先順序、前臺線程和後臺線程以及向線程傳遞參數的知識,在這一篇中我們將講述如何使用C#的lock關鍵字鎖定線程、使用Monitor鎖定線程以及線程中的異常處理。 九、使用C#的lock關鍵字鎖定線程 1、使用Visual Studio 2 ...
  • 建立窗體的名稱修改為:Form_HoverTree文後附有源碼下載。主要代碼: 效果圖: 可以看出,這個窗體為自定義形狀的窗體,沒有標題欄。具體參考:http://hovertree.com/h/bjaf/52nadvt4.htm 源碼下載: http://hovertree.com/h/bjaf/ ...
  • 委托是個說爛了的話題,但是依舊有好多人不知道為什麼要在C 中使用委托,最近有朋友也問到我這個問題,所以舉例些場景,以供那些知道怎麼聲明委托、怎麼調用卻不知道為什麼要用的朋友一些參考,當然也是希望驗證下自己的理解是否正確。 如何聲明一個委托 委托使用關鍵字delegate,從外形上看和一個沒有方法體的 ...
  • 什麼是工作流? 工作流(Workflow),是對工作流程及其各操作步驟之間業務規則的抽象、概括、描述。BPM:是Business Process Management的英文字母縮寫.即業務流程管理,是一套達成企業各種業務環節整合的全面管理模式。 工作流軟體,顧名思義,就是業務信息數據在多個環節模塊之 ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...