EF 底层基础方法

  1 using System;
  2 using System.Data;
  3 using System.Collections.Generic;
  4 using System.Data.Entity;
  5 using System.Linq;
  6 using System.Linq.Expressions;
  7 using System.Text;
  8 using System.Threading.Tasks;
  9 using SchoolDAL.Context;
 10 using SchoolDAL.Entity;
 11 using System.Data.Entity.Infrastructure;
 12 using System.Data.SqlClient;
 13 using EntityFramework.Extensions;
 14 using System.Reflection;
 15 namespace SchoolDAL
 16 {
 17
 18     public class BaseDAL
 19     {
 20
 21         public  DbContext Context;
 22
 23         public BaseDAL(DbContext context)
 24         {
 25             Context = context;
 26         }
 27         public int GetModelCount<TEntity>(Expression<Func<TEntity, bool>> filterList) where TEntity : class
 28         {
 29             return FindByItem(filterList).Count();
 30         }
 31
 32         public List<TEntity> FindModelList<TEntity>(Expression<Func<TEntity, bool>> filterList,int currPage,int size,out int Total) where TEntity : class
 33         {
 34             List<TEntity> list=new List<TEntity>();
 35             var json = FindByItem(filterList);
 36             try
 37             {
 38                 Total = json.Count();
 39                 list = json.Skip(currPage).Take(size).ToList();// only support order by Id asc
 40             }
 41             catch
 42             {
 43                 Total = 0;
 44             }
 45             return list;
 46         }
 47
 48         public TEntity FindModel<TEntity>(Expression<Func<TEntity, bool>> filterList) where TEntity : class
 49         {
 50           return   FindByItem(filterList).FirstOrDefault();
 51         }
 52
 53         public IQueryable<TEntity> FindByItem<TEntity>(List<Expression<Func<TEntity, bool>>> filterList) where TEntity : class
 54         {
 55             var json = Context.Set<TEntity>().Where(t => true);
 56             foreach (var item in filterList)
 57             {
 58                 json = json.Where(item);
 59             }
 60             return json;
 61         }
 62
 63         public IQueryable<TEntity> FindByItem<TEntity>(Expression<Func<TEntity, bool>> filterList) where TEntity : class
 64         {
 65             var json = Context.Set<TEntity>().Where(filterList);
 66
 67             return json;
 68         }
 69
 70         public bool Create<TEntity>(TEntity TObject) where TEntity : class
 71         {
 72             try
 73             {
 74                 Context.Set<TEntity>().Add(TObject);
 75                 Context.SaveChanges();
 76                 return true;
 77             }
 78             catch (Exception ex)
 79             {
 80                 return false;
 81             }
 82         }
 83
 84         public bool Edit<TEntity>(TEntity TObject) where TEntity : class
 85         {
 86             try
 87             {
 88                 var entry = Context.Entry(TObject);
 89                 Context.Set<TEntity>().Attach(TObject);
 90                 entry.State = EntityState.Modified;
 91                 Context.SaveChanges();
 92                 return true;
 93             }
 94             catch
 95             {
 96                 //throw ex;
 97                 return false;
 98             }
 99         }
100
101         public void Delete<TEntity>(TEntity TObject) where TEntity : class
102         {
103             try
104             {
105                 Context.Set<TEntity>().Remove(TObject);
106                 Context.SaveChanges();
107
108             }
109             catch (Exception ex)
110             {
111
112             }
113
114         }
115
116
117         public int BulkUpdate<TEntity>(List<Expression<Func<TEntity, bool>>> filterList, Expression<Func<TEntity, TEntity>> UpdatedModel) where TEntity : class
118         {
119             int res = 0;
120             var json = FindByItem(filterList);
121             using (var tran = Context.Database.BeginTransaction())
122             {
123                 try
124                 {
125                     res = Context.Set<TEntity>().Update(json, UpdatedModel);
126                     tran.Commit();
127                 }
128                 catch
129                 {
130                     tran.Rollback();
131                 }
132             }
133             return res;
134         }
135
136         public int BulkDelete<TEntity>(List<Expression<Func<TEntity, bool>>> filterList) where TEntity : class
137         {
138             int res=0;
139             var json = FindByItem(filterList);
140             using(var tran=   Context.Database.BeginTransaction())
141             {
142                 try
143                 {
144                    res= Context.Set<TEntity>().Delete(json);
145                     tran.Commit();
146                 }
147                 catch
148                 {
149                 tran.Rollback();
150                 }
151             }
152             return res;
153
154         }
155
156         public void BulkCreate<TEntity>(List<TEntity> list,string tableName) where TEntity : class
157         {
158
159             DataTable dt = new DataTable();
160             Type type = typeof(TEntity);
161             PropertyInfo[] propes = type.GetProperties();
162             foreach (var prop in propes)
163             {
164                 dt.Columns.Add(prop.Name);
165             }
166             foreach (var entity in list)
167             {
168                 DataRow row = dt.NewRow();
169                 foreach (DataColumn col in dt.Columns)
170                 {
171                     foreach (var prop in propes)
172                     {
173                         if (!col.ColumnName.Equals("id", StringComparison.InvariantCultureIgnoreCase))
174                         {
175                             if (prop.Name.Equals(col.ColumnName, StringComparison.InvariantCultureIgnoreCase))
176                                 row[col.ColumnName] = prop.GetValue(entity);
177                         }
178                     }
179
180                 }
181                 dt.Rows.Add(row);
182             }
183             if (dt != null && dt.Rows.Count > 0)
184             {
185                 using (var tran = Context.BeginTransaction())
186                 {
187                     try
188                     {
189                         using (SqlBulkCopy sqlBulkCopy = new SqlBulkCopy(Context.Database.Connection.ConnectionString))
190                         {
191                             sqlBulkCopy.BatchSize = 10000;
192                             sqlBulkCopy.BulkCopyTimeout = 12000;
193                             sqlBulkCopy.DestinationTableName = string.Format("dbo.{0}", tableName);
196                                 for (int i = 1; i < dt.Columns.Count; i++)
197                                 {
198                                     sqlBulkCopy.ColumnMappings.Add(i, i);
199                                 }
201                             sqlBulkCopy.WriteToServer(dt);
202                             tran.Commit();
203                         }
204                     }
205                     catch (Exception e)
206                     {
207                         tran.Rollback();
208                     }
209                 }
210
211             }
212
213         }
214
215         public SchoolContext GetContext()
216         {
217             return new SchoolContext();
218         }
219
220         public void DisposeContext(SchoolContext db)
221         {
222                 if (db != null)
223                     db.Dispose();
224         }
225
226         public DbEntityEntry<TEntity> EditEntry<TEntity>(TEntity TObject) where TEntity : class
227         {
228             var entry = Context.Entry(TObject);
229             Context.Set<TEntity>().Attach(TObject);
230             entry.State = EntityState.Modified;
231             return entry;
232         }
233
234         public List<TEntity> ExecuteByStoreProcedure<TEntity>(string ExecuteProcedure,SqlParameter[] parms) where TEntity : class
235         {
236             List<SqlParameter> parmList = new List<SqlParameter>();
237
245             var list = Context.Database.SqlQuery<TEntity>(ExecuteProcedure, parms);
246                 var enityList = list.ToList();
247
248                 return enityList;
249
250         }
251
252     }
253 }

上面方法包括常见的增删改查,多条件查询,批量删除和修改,以及对存储过程的支持。其中BulkDelete 和BulkUpdate 依赖于EntityFramework.Extensions的类库,这个类库必须通过Nuget安装 链接地址:https://www.nuget.org/packages/EntityFramework.Extended 注意你的Ef版本。

EF 底层基础方法

时间: 2024-10-13 23:57:16

EF 底层基础方法的相关文章

进阶之路(基础篇) - 009 通过底层AVR方法实现SPI数据传输

主机端: /********************************* 代码功能:通过底层AVR方法实现SPI数据传输(主机端) 创作时间:2016*10*17 使用资源: 更低阶的 aTmega(AVR) 库 SPI三个寄存器SPCR(控制寄存器),SPCR(状态寄存器),SPDR(数据的暂存器) SPCR(SPI Control Register暂存寄存器) 7bit SPIE 片选使能,SPIE = 1;片选无效,SPIE = 0片选有效(主机无需片选)(单机通信也无需片选) 6b

数据孤岛之下,医疗大数据底层基础该如何建设?

随着医疗卫生信息系统的不断完善和数据的持续积累,健康医疗领域已向"大数据时代"高速迈进.医疗健康大数据具有规模大.增速快,结构多样.潜在应用价值高等特点.面对海量的数据,如何基于创新理念和技术,开启人类应对疾病的新篇章,推动医学科学发展,促进全球健康,已成为国内外共同关注的大课题. "碎片化"的大数据应用底层基础 在可以预见的中近期,医疗大数据发展主要会在三个方向:--推动医疗数据的信息化.进一步推动医疗服务机构信息化建设,为医疗数据的收集提供采集入口.--全面加快

Entity Framework SqlFunctions 教你如何在EF调用sqlserver方法的函数存根

今天算是研究了一天的SqlFunctions,请教了几个群的牛人,居然发现大伙对这个都比较陌生, 有的甚至直指EF中是不能调用sqlserver里的方法的. 因为之前搞过linq to sql 里面的SqlMethod ,所以觉得EF里面必须是可以的. 首先需要简短介绍一下EF6和EF5,当你NuGet一个EF5的包的时候,只有EntityFramework,而EF6确有EntityFramework和EntityFramework.SqlServer, 这2者是有很大区别的. 在EF5环境下,

通过底层AVR方法实现SPI数据传输

主机端: 1 /********************************* 2 代码功能:通过底层AVR方法实现SPI数据传输(主机端) 3 创作时间:2016*10*17 4 使用资源: 5 更低阶的 aTmega(AVR) 库 6 SPI三个寄存器SPCR(控制寄存器),SPCR(状态寄存器),SPDR(数据的暂存器) 7 SPCR(SPI Control Register暂存寄存器) 8 7bit SPIE 片选使能,SPIE = 1;片选无效,SPIE = 0片选有效(主机无需片

C# 验证码识别基础方法及源码

原文:C# 验证码识别基础方法及源码 先说说写这个的背景 最近有朋友在搞一个东西,已经做的挺不错了,最后想再完美一点,于是乎就提议把这种验证码给K.O.了,于是乎就K.O.了这个验证码.达到单个图片识别时间小于200ms,500个样本人工统计正确率为95%.由于本人没有相关经验,是摸着石头过河.本着经验分享的精神,分享一下整个分析的思路.在各位大神面前献丑了. 再看看部分识别结果 是不是看着很眼熟? 处理第一步 去背景噪音和二值化 对于这一块,考虑了几种方法. 方法一:统计图片颜色分布,颜色占有

改善EF代码的方法(下)

本节,我们将介绍一些改善EF代码的方法,包括编译查询.存储模型视图以及冲突处理等内容. > CompiledQuery 提供对查询的编译和缓存以供重新使用.当相同的查询需要执行很多遍的时候,那么我们可以使用ComplieQuery将查询的语句进行编译以便下次使用,这样可以免去对同一语句的多次处理,从而改善性能.示例代码如下: public void ComplieTest() { using (var db = new NorthwindEntities1()) { //对查询进行编译 var

C#验证码识别基础方法实例分析

本文实例讲述了C#验证码识别基础方法,是非常实用的技巧.分享给大家供大家参考.具体方法分析如下: 背景 最近有朋友在搞一个东西,已经做的挺不错了,最后想再完美一点,于是乎就提议把这种验证码给K.O.了,于是乎就K.O.了这个验证码.达到单个图片识别时间小于200ms,500个样本人工统计正确率为95%.由于本人没有相关经验,是摸着石头过河.本着经验分享的精神,分享一下整个分析的思路.在各位大神面前献丑了. 再来看看部分识别结果如下图所示: 这里是不是看着很眼熟?下面再来具体分析一下. 处理第一步

一些底层基础知识

一些底层基础知识 一.操作系统结构: 1.计算机内存:用户区域.内核区域 1)用户区域:普通应用程序运行在用户区域 2)内核区域:操作系统运行在内核区域设备驱动程序,操作系统内核 3)32位操作系统,如果最大内存为4G,操作系统占1G,剩下给普通应用程序 2.32位和64位系统: CPU(运算器-->运算.控制器-->控制电路高低.寄存器-->操作系统的位数取决于寄存器的位数)+内存条 1)32位CPU:ax\eax\ebx\ecx\edx2)64位CPU:reax\rebx\recx\

EntityFramework之摸索EF底层(八)

前言 此篇文章我将深入去摸索edmx中一些不为人知的东西,有时候我们需要知道Code  First模型中一些存储以及映射的原理,个人觉得那是必要的也是有用的,因为很有可能SQL会出现一些其他问题,只有掌握了一些必备的原理,这样当报错时才会不知所措. 原理 我们知道实体数据模型(EDM)是应用程序和数据存储之间的沟通桥梁,同时我们通过属性映射的API与数据存储之间的交互都是基于EDX,所以一切我们从EDM开始谈起. 我们不用操之过急,我们先了解原理之后,再通过实际来操作你就明白为什么要先了解原理的