六.EF DLL数据访问帮助 父类

王朝学院·作者佚名  2016-08-27
窄屏简体版  字體: 小  |  中  |  大  |  超大  

目录一.EF修改和删除的多种方法

二.标准查询where

三.include

四.skip take

五.反射获取实例属性

六.EF DLL数据访问帮助类

一.EF修改和删除的多种方法方法1:官方推荐 先查询在修改 或者删除1varstudent = db.Students.FirstOrDefault(t => t.Id ==Mid);2student.Name ="修改后";//修改值数据3db.SaveChanges();//保存4db.Students.Remove(student);//移除对象5db.SaveChanges();//保存

方法2:先附加到ef实体对象 然后在移除1Students s =newStudents();2s.Id =int.Parse(id);3db.Students.Attach(s);//将实体附加到 上下文中 ;4db.Students.Remove(s);5if(db.SaveChanges() >=1)6{7//成功8}

方法3:添加到ef实体对象 然后标记删除1Students s =newStudents();2s.Id =int.Parse(id);3db.Entry<Students>(s).State =System.Data.EntityState.Deleted;//标记删除4intnum = db.SaveChanges();

方法4:修改实体1//这里需要关闭验证 不然会报错2db.Configuration.ValidateOnSaveEnabled =false;3DbEntityEntry dbS = db.Entry<Students>(s);4dbS.State = System.Data.EntityState.Unchanged;//清楚所有字段标记5dbS.PRoperty("Gender").IsModified =true;//标记修改字段6intnum =db.SaveChanges();7db.Configuration.ValidateOnSaveEnabled =true;//打开验证8if(num >=1)9{10//修改成功11}

二.标准查询where 在不同场景 实现方法不一样1//场景1:ef的数据集 使用where 是在 IQueryable 的扩展方法2//场景2:List集合的数据集 使用where 是在 IEnumerable 的扩展方法

三.include场景1:自动 连接查询【无Include】1//1.自动 连接查询【无Include】2varstu1 = db.Students.Where(t => t.Classes.CName =="zha");3varcname = stu1.FirstOrDefault();

1SELECTTOP(1)2[Extent1].[Id]AS[Id],3[Extent1].[CId]AS[CId],4[Extent1].[Name]AS[Name],5[Extent1].[Gender]AS[Gender],6[Extent1].[IsDel]AS[IsDel],7[Extent1].[AddTime]AS[AddTime]8FROM[dbo].[Students]AS[Extent1]9INNERJOIN[dbo].[Classes]AS[Extent2]ON[Extent1].[CId]=[Extent2].[CID]10WHERE'zha'=[Extent2].[CName]

场景2:手动 内连接查询【有Include】1//2手动 内连接查询【有Include】2varstu2 = db.Students.Include("Classes").Where(t => t.Id ==11);3varccc = stu2.FirstOrDefault().Classes.CName;

1SELECT2[Limit1].[Id]AS[Id],3[Limit1].[CId]AS[CId],4[Limit1].[Name]AS[Name],5[Limit1].[Gender]AS[Gender],6[Limit1].[IsDel]AS[IsDel],7[Limit1].[AddTime]AS[AddTime],8[Extent2].[CID]AS[CId1],9[Extent2].[CName]AS[CName],10[Extent2].[CCount]AS[CCount],11[Extent2].[CImg]AS[CImg],12[Extent2].[CIsDel]AS[CIsDel],13[Extent2].[CAddTime]AS[CAddTime]14FROM(SELECTTOP(1)[Extent1].[Id]AS[Id],[Extent1].[CId]AS[CId],[Extent1].[Name]AS[Name],[Extent1].[Gender]AS[Gender],[Extent1].[IsDel]AS[IsDel],[Extent1].[AddTime]AS[AddTime]15FROM[dbo].[Students]AS[Extent1]16WHERE11=[Extent1].[Id])AS[Limit1]17LEFTOUTERJOIN[dbo].[Classes]AS[Extent2]ON[Limit1].[CId]=[Extent2].[CID]

场景3:无连接查询 分两次sql查询【无Include】1//3.无连接查询 分两次sql查询【无Include】2varstucc = db.Students.Where(t => t.Id ==11);3varzz = stucc.FirstOrDefault().Classes.CName;

1SELECTTOP(1)2[Extent1].[Id]AS[Id],3[Extent1].[CId]AS[CId],4[Extent1].[Name]AS[Name],5[Extent1].[Gender]AS[Gender],6[Extent1].[IsDel]AS[IsDel],7[Extent1].[AddTime]AS[AddTime]8FROM[dbo].[Students]AS[Extent1]9WHERE11=[Extent1].[Id];1011SELECT12[Extent1].[CID]AS[CID],13[Extent1].[CName]AS[CName],14[Extent1].[CCount]AS[CCount],15[Extent1].[CImg]AS[CImg],16[Extent1].[CIsDel]AS[CIsDel],17[Extent1].[CAddTime]AS[CAddTime]18FROM[dbo].[Classes]AS[Extent1]19WHERE[Extent1].[CID]=@EntityKeyValue1

四.skip take1//Skip 跳过序列中指定数量的元素,然后返回剩余的元素。2//Take 从序列的开头返回指定数量的连续元素。3//根据这两个方法可以 实现分页效果

五.反射获取实例属性1//利用反射 获取 类 对象 的所有公共 属性 默认是[GetProperties(BindingFlags.Instance | BindingFlags.Public)]2varlistPro =typeof(Students).GetProperties().ToList();3objectobj1 =newobject();4objectobj2 =newobject();5listPro.ForEach(l =>6{7varnewValue = l.GetValue(obj1);//获得某个对象的属性值8l.SetValue(obj2, newValue);//修改一个对象的属性 值9});

六.EF DLL数据访问帮助 父类1using_00EFModel;2usingSystem;3usingSystem.Collections.Generic;4usingSystem.Linq;5usingSystem.Linq.Expressions;6usingSystem.Reflection;7usingSystem.Text;8usingSystem.Threading.Tasks;910namespace_00EFDLL11{12///<summary>13///数据访问 父类14///</summary>15publicclassBaseDLL<Tclass>whereTclass :class,new()16{17///<summary>18///数据访问上下文19///</summary>20_00EFModel.Entities db =new_00EFModel.Entities();2122#region1.0添加数据 + Add(Tclass model)23///<summary>24///1.0添加数据25///</summary>26///<param name="model"></param>27publicvoidAdd(Tclass model)28{29db.Set<Tclass>().Add(model);30}31#endregion3233#region2.0 删除方法1 删除给定的对象 +Del(Tclass model)34///<summary>35///2.0 删除方法1 删除给定的对象36///</summary>37///<param name="model"></param>38publicvoidDel(Tclass model)39{40//将实体 添加到上下文41db.Set<Tclass>().Attach(model);42//把实体 标记为删除43db.Set<Tclass>().Remove(model);44}45#endregion4647#region2.1 删除方法2 根据条件删除对象 +Del(Expression<Func<Tclass, bool>> delWhere)48///<summary>49///2.1 删除方法2 根据条件删除对象50///</summary>51///<param name="delWhere"></param>52publicvoidDel(Expression<Func<Tclass,bool>>delWhere)53{54//查询所有满足条件的实体对象55varmodelS = db.Set<Tclass>().Where(delWhere).ToList();56modelS.ForEach(m =>57{58//附加到 上下文59db.Set<Tclass>().Attach(m);60//标记为 删除状态61db.Set<Tclass>().Remove(m);62});63}64#endregion6566#region3.0 修改方法1 修改某个实体的 某些属性 +Up(Tclass model, params string[] strparams)67///<summary>68///3.0 修改方法1 修改某个实体的 某些属性(根据id修改)【*用这个需要注意关闭检查】69///</summary>70///<param name="model"></param>71///<param name="strparams">可变参数</param>72publicintUp(Tclass model,paramsstring[] strparams)73{74//关闭检查75db.Configuration.ValidateOnSaveEnabled =false;76//附加到上下文77varm = db.Entry<Tclass>(model);78//把全部属性标记为 没有修改79m.State =System.Data.Entity.EntityState.Unchanged;80for(inti =0; i < strparams.Length; i++)81{82//标记要修改的属性83m.Property(strparams[i]).IsModified =true;84}85intnum =db.SaveChanges();86//打开检查87db.Configuration.ValidateOnSaveEnabled =true;88returnnum;89}90#endregion9192#region3.1 修改方法2 根据条件 修改指定的 属性 值 +Up(Expression<Func<Tclass, bool>> upWhere, Tclass model, params string[] strparame)93///<summary>94///3.1 修改方法2 根据条件 修改指定的 属性 值95///</summary>96///<param name="upWhere"></param>97///<param name="model"></param>98///<param name="strparame"></param>99publicvoidUp(Expression<Func<Tclass,bool>> upWhere, Tclass model,paramsstring[] strparame)100{101//查询出满足条件的所有实体102varmodelS = db.Set<Tclass>().Where(upWhere).ToList();103//利用反射 获取 类 对象 的所有公共 属性 默认是[GetProperties(BindingFlags.Instance | BindingFlags.Public)]104varlistPro =typeof(Tclass).GetProperties().ToList();105//属性对象 键值对106List<PropertyInfo> dic =newList<PropertyInfo>();107listPro.ForEach(l =>108{109for(inti =0; i < strparame.Length; i++)110{111//循环 判断 添加 需要修改的 属性对象112if(l.Name ==strparame[i].Trim())113{114dic.Add(l);115

break;116}117}118});119120if(dic.Count >0)//判断 属性对象集合 是否 有 数据121{122foreach(varpropertyindic)123{124//取 传过来的对象 里面的值125varnewValue =property.GetValue(model);126foreach(varmymodelinmodelS)127{128//修改到 对象集合129property.SetValue(mymodel, newValue);130}131}132}133}134#endregion135136#region4.0 查询方法 +GetList<Tkey>(Expression<Func<Tclass, bool>> strWhere, Expression<Func<Tclass, Tkey>> strOrederBy = null, bool order = true)137///<summary>138///4.0 查询方法139///</summary>140///<typeparam name="Tkey"></typeparam>141///<param name="strWhere">查询条件</param>142///<param name="strOrederBy">排序条件</param>143///<param name="order">是否升序</param>144///<returns></returns>145publicList<Tclass> GetList<Tkey>(Expression<Func<Tclass,bool>> strWhere, Expression<Func<Tclass, Tkey>> strOrederBy =null,boolorder =true)146{147vart = db.Set<Tclass>().Where(strWhere);148if(strOrederBy !=null)149{150if(order)151t =t.OrderBy(strOrederBy);152else153t =t.OrderByDescending(strOrederBy);154}155returnt.ToList();156}157#endregion158159#region4.1 查询方法2 分页查询 +GetList<Tkey>(int indexPage, int sizePage, Expression<Func<Tclass, bool>> strWhere, Expression<Func<Tclass, Tkey>> strOrederBy = null, bool order = true)160///<summary>161///4.1 查询方法2 分页查询162///</summary>163///<typeparam name="Tkey"></typeparam>164///<param name="indexPage">页码</param>165///<param name="sizePage">页容量</param>166///<param name="strWhere">查询条件</param>167///<param name="strOrederBy">排序字段</param>168///<param name="order">是否升序</param>169///<returns></returns>170publicList<Tclass> GetList<Tkey>(intindexPage,intsizePage, Expression<Func<Tclass,bool>> strWhere, Expression<Func<Tclass, Tkey>> strOrederBy =null,boolorder =true)171{172vart = db.Set<Tclass>().Where(strWhere);173if(strOrederBy !=null)174{175if(order)176t =t.OrderBy(strOrederBy);177else178t =t.OrderByDescending(strOrederBy);179}180returnt.Skip((indexPage -1) *sizePage).Take(sizePage).ToList();181}182#endregion183184#region提交 +save()185///<summary>186///提交187///</summary>188///<returns></returns>189publicintsave()190{191returndb.SaveChanges();192}193#endregion194}195}

View Code

说明:此类文章仅供本人学习记录使用。如有2B的错误,欢迎指出。不喜勿喷!

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航