首页 > 代码库 > EF 底层基础方法
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 : class102 {103 try104 {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 : class118 {119 int res = 0;120 var json = FindByItem(filterList);121 using (var tran = Context.Database.BeginTransaction())122 {123 try124 {125 res = Context.Set<TEntity>().Update(json, UpdatedModel);126 tran.Commit();127 }128 catch129 {130 tran.Rollback();131 }132 }133 return res;134 }135 136 public int BulkDelete<TEntity>(List<Expression<Func<TEntity, bool>>> filterList) where TEntity : class137 {138 int res=0;139 var json = FindByItem(filterList);140 using(var tran= Context.Database.BeginTransaction())141 {142 try143 {144 res= Context.Set<TEntity>().Delete(json);145 tran.Commit();146 }147 catch148 {149 tran.Rollback();150 }151 }152 return res;153 154 }155 156 public void BulkCreate<TEntity>(List<TEntity> list,string tableName) where TEntity : class157 {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 try188 {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 : class227 {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 : class235 {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版本。
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。