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
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...