首页 > 代码库 > EF6.0+APS.NET MVC5.0项目初探四(填充各个程序集)
EF6.0+APS.NET MVC5.0项目初探四(填充各个程序集)
第一步:每次生成数据库是都需要修改的地方
在Domain.DbContext中添加
在Infrastructure.Ioc.DALFactory中添加
第二步:DataAccess.DAL说明:
我们先在此添加一个基类
1 using System; 2 using System.Collections.Generic; 3 using System.Data; 4 using System.Data.Entity; 5 using System.Data.Entity.Infrastructure; 6 using System.Linq; 7 using System.Linq.Expressions; 8 using System.Reflection; 9 using System.Text; 10 using System.Threading.Tasks; 11 // 12 13 namespace DataAccess.DAL 14 { 15 /// <summary> 16 /// EF DAL CURD基类 17 /// </summary> 18 /// <typeparam name="T"></typeparam> 19 public abstract class BaseDAL<T> where T : class,new() 20 { 21 22 /// <summary> 23 /// 上下文网关 24 /// </summary> 25 protected Domain.DbContext.DbContext db = new Domain.DbContext.DbContext(); 26 // protected DbContext db = new DBContextFactory().GetDbContext();//直接从线程中获取上下文网关 27 28 #region 1.Add 29 30 /// <summary> 31 /// 增加一条数据 32 /// </summary> 33 /// <param name="entity"></param> 34 /// <returns></returns> 35 public bool AddEntity(T entity) 36 { 37 38 db.Entry<T>(entity).State = System.Data.Entity.EntityState.Added; 39 // db.Set<T>().Add(entity);此方法同上方法 40 return db.SaveChanges() > 0; 41 } 42 /// <summary> 43 /// 同时增加多条数据到一张表(事务处理) 44 /// </summary> 45 /// <param name="entitys"></param> 46 /// <returns></returns> 47 public bool AddEntity(List<T> entitys) 48 { 49 foreach (var entity in entitys) 50 { 51 db.Entry<T>(entity).State = System.Data.Entity.EntityState.Added; 52 } 53 // entitys.ForEach(c=>db.Entry<T>(c).State = EntityState.Added);//等价于上面的循环 54 return db.SaveChanges() > 0; 55 } 56 #endregion 57 58 #region 2.Modify 59 /// <summary> 60 /// 修改一条数据,会修改所有列的值,没有赋值的属性将会被赋予属性类型的默认值************** 61 /// </summary> 62 /// <param name="entity"></param> 63 /// <returns></returns> 64 public bool ModifyEntity(T entity) 65 { 66 db.Set<T>().Attach(entity); 67 db.Entry<T>(entity).State = System.Data.Entity.EntityState.Modified;//将所有属性标记为修改状态 68 return db.SaveChanges() > 0; 69 } 70 public bool ModifyEntity(List<T> entitys) 71 { 72 entitys.ForEach(entity => 73 { 74 db.Set<T>().Attach(entity); 75 db.Entry<T>(entity).State = System.Data.Entity.EntityState.Modified;//将所有属性标记为修改状态 76 }); 77 return db.SaveChanges() > 0; 78 } 79 /// <summary> 80 /// 修改一条数据,会修改指定列的值 81 /// </summary> 82 /// <param name="entity">要修改的实体对象</param> 83 /// <param name="proNames">要修改的属性名称</param> 84 /// <returns></returns> 85 public bool ModifyEntity(T entity, params string[] proNames) 86 { 87 88 DbEntityEntry<T> dbee = db.Entry<T>(entity); 89 if (dbee.State == System.Data.Entity.EntityState.Detached) 90 { 91 db.Set<T>().Attach(entity); 92 } 93 dbee.State = System.Data.Entity.EntityState.Unchanged;//先将所有属性状态标记为未修改 94 proNames.ToList().ForEach(c => dbee.Property(c).IsModified = true);//将要修改的属性状态标记为修改 95 return db.SaveChanges() > 0; 96 } 97 /// <summary> 98 /// 根据条件批量修改指定的列******************** 99 /// </summary>100 /// <param name="entity"></param>101 /// <param name="whereLambds"></param>102 /// <param name="proNames"></param>103 /// <returns></returns>104 public bool ModifyEntity(T entity, Expression<Func<T, bool>> whereLambds, params string[] proNames)105 {106 var entitys = db.Set<T>().Where(whereLambds).ToList();107 PropertyInfo[] proinfos = entity.GetType().GetProperties();108 List<PropertyInfo> list = new List<PropertyInfo>();109 foreach (var p in proinfos)110 {111 if (proNames.Contains(p.Name))112 {113 list.Add(p);114 }115 }116 entitys.ForEach(c =>117 {118 foreach (var p in list)119 {120 object value = http://www.mamicode.com/p.GetValue(entity, null);121 p.SetValue(c, value, null);122 }123 });124 return db.SaveChanges() > 0;125 }126 #endregion127 128 #region 3.Delete129 130 /// <summary>131 /// 删除一个实体对象132 /// </summary>133 /// <param name="entity"></param>134 /// <returns></returns>135 public bool DeleteEntity(T entity)136 {137 db.Set<T>().Attach(entity);138 db.Entry<T>(entity).State = System.Data.Entity.EntityState.Deleted;139 return db.SaveChanges() > 0;140 }141 /// <summary>142 /// 根据条件批量删除实体对象143 /// </summary>144 /// <param name="whereLambds"></param>145 /// <returns></returns>146 public bool DeleteEntityByWhere(Expression<Func<T, bool>> whereLambds)147 {148 var data = http://www.mamicode.com/db.Set().Where (whereLambds).ToList();149 return DeleteEntitys(data);150 }151 /// <summary>152 /// 事务批量删除实体对象153 /// </summary>154 /// <param name="entitys"></param>155 /// <returns></returns>156 public bool DeleteEntitys(List<T> entitys)157 {158 foreach (var item in entitys)159 {160 db.Set<T>().Attach(item);161 db.Entry<T>(item).State = System.Data.Entity.EntityState.Deleted;162 }163 return db.SaveChanges() > 0;164 }165 /// <summary>166 /// 批量物理删除数据,也可以用作单个物理删除--此方法适用于id为int类型的表--性能会比先查询后删除快167 /// </summary>168 /// <param name="ids">ids格式:1,3,2</param>169 /// <returns></returns>170 public bool DeletePhysicsEntitys(string ids)171 {172 //delete from Info_Notice where id in(10)173 string tableName = typeof(T).Name;//获取表名174 if (ids.Contains(","))175 {176 ids = ids.Substring(1);177 } 178 string sql = string.Format("delete from {0} where id in({1})", tableName, ids);179 return db.Database.ExecuteSqlCommand(sql) > 0;180 }181 /// <summary>182 /// 批量软删除数据,也可以用作单个软删除--此方法适用于id为int类型的表183 /// </summary>184 /// <param name="ids">ids格式:1,3,2</param>185 /// <returns></returns>186 public bool DeleteSoftEntitys(string ids)187 {188 //update dbo.Info_Notice set Deleted=1 where id in(6,7)189 string tableName = typeof(T).Name;//获取表名 190 if (ids.Contains(","))191 {192 ids = ids.Substring(1);193 }194 string sql = string.Format("update {0} set Deleted=1 where id in({1})", tableName, ids);195 return db.Database.ExecuteSqlCommand(sql) > 0;196 197 }198 199 #endregion200 201 #region 4.Select202 //带条件查询203 public List<T> GetEntitys(Expression<Func<T, bool>> whereLambds)204 {205 return db.Set<T>().Where<T>(whereLambds).ToList<T>();206 }207 //带排序查询208 public List<T> GetEntitys<S>(Expression<Func<T, bool>> whereLambds, bool isAsc, Expression<Func<T, S>> orderByLambds)209 {210 var temp = db.Set<T>().Where<T>(whereLambds);211 if (isAsc)212 {213 return temp.OrderBy<T, S>(orderByLambds).ToList<T>();214 }215 else216 {217 return temp.OrderByDescending<T, S>(orderByLambds).ToList<T>();218 }219 }220 public List<T> GetEntitys(string sql, string where, string orderKey, params object[] paramss)221 {222 223 sql = sql + " where 1=1 " + where;224 sql += " order by " + orderKey;225 var temp = db.Database.SqlQuery<T>(sql, paramss);226 return temp.ToList<T>(); ;227 228 }229 //带分页查询230 public List<T> GetPagedEntitys<S>(int pageIndex, int pageSize, out int rows, out int totalPage, Expression<Func<T, bool>> whereLambds, bool isAsc, Expression<Func<T, S>> orderByLambds)231 {232 var temp = db.Set<T>().Where<T>(whereLambds);233 rows = temp.Count();234 totalPage = rows % pageSize == 0 ? rows / pageSize : rows / pageSize + 1;235 temp = isAsc ? temp.OrderBy<T, S>(orderByLambds) : temp.OrderByDescending<T, S>(orderByLambds);236 temp = temp.Skip<T>(pageSize * (pageIndex - 1)).Take<T>(pageSize);237 238 return temp.ToList<T>();239 }240 //传统sql结合EF分页实现查询241 public List<T> GetPagedEntitys(int pageIndex, int pageSize, out int rows, out int totalPage, string where, string orderKey, params object[] paramss)242 {243 #region 此种方法会在内存中进行分页---已废弃244 /*245 string sqls = "";246 if (string.IsNullOrEmpty(sql))247 {248 sqls = "select * from " + typeof(T).Name;249 }250 else251 {252 sqls = sql;253 }254 if (!string.IsNullOrEmpty(where))255 {256 sqls = sqls + " where 1=1 " + where;257 }258 if (!string.IsNullOrEmpty(orderKey))259 {260 sqls += " order by " + orderKey;261 }262 var temp = db.Database.SqlQuery<T>(sqls, paramss);263 rows = temp.Count();264 if (rows % pageSize == 0)265 {266 totalPage = rows / pageSize;267 }268 else269 {270 totalPage = rows / pageSize + 1;271 }272 273 temp = temp.Skip(pageSize * (pageIndex - 1)).Take(pageSize);274 return temp.ToList<T>(); 275 */276 277 #endregion278 279 280 string sqls = "";281 string tableName = typeof(T).Name;//获取表名282 string sql = string.Format("select *, row_number() over (order by {0} ) as row_number from {1}", string.IsNullOrEmpty(orderKey) ? "Id" : orderKey, tableName);283 string where1 = !string.IsNullOrEmpty(where) ? " where 1=1 " + where : "";284 int tag = (pageIndex - 1) * pageSize;285 sqls = string.Format(@"select top ({0}) * from 286 ( 287 {1}288 {2}289 ) as t290 where t.row_number > {3}", pageSize, sql, where1, tag);291 //获取数据292 var list = db.Database.SqlQuery<T>(sqls, paramss).ToList<T>();293 294 //通过自定义的class R 取得总页码数和记录数295 string sqlCount = string.Format("select count(1) as Rows from {0} {1}", tableName, where1);296 rows = db.Database.SqlQuery<R>(sqlCount, paramss).ToList()[0].Rows;297 totalPage = rows % pageSize == 0 ? rows / pageSize : rows / pageSize + 1;298 299 return list;300 301 }302 #endregion303 304 public class R305 {306 public int Rows { get; set; }307 }308 309 }310 }
然后新建实体对于的DAL,继承BaseDAL<T>
using Domain.Entity;using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace DataAccess.DAL{ public class Public_AdPositionDAL : BaseDAL<T_Public_AdPosition> { }}
第三步:BusinessLogic.BLL说明
新建基类:
1 using DataAccess.DAL; 2 using System; 3 using System.Collections.Generic; 4 using System.Linq; 5 using System.Linq.Expressions; 6 using System.Text; 7 using System.Threading.Tasks; 8 9 namespace BusinessLogic.BLL 10 { 11 /// <summary> 12 /// BLL层抽象基类 13 /// </summary> 14 /// <typeparam name="T"></typeparam> 15 public abstract class BaseBLL<T> where T : class,new() 16 { 17 18 protected BaseDAL<T> dal = null; 19 public BaseBLL() 20 { 21 SetDAL(); 22 } 23 /// <summary> 24 /// 必须重载的抽象方法,用来实例化 idal 25 /// </summary> 26 public abstract void SetDAL(); 27 28 #region 1.Add 29 30 31 /// <summary> 32 /// 增加一条数据 33 /// </summary> 34 /// <param name="entity"></param> 35 /// <returns></returns> 36 public bool AddEntity(T entity) 37 { 38 39 return dal.AddEntity(entity); 40 } 41 /// <summary> 42 /// 同时增加多条数据到一张表(事务处理) 43 /// </summary> 44 /// <param name="entitys"></param> 45 /// <returns></returns> 46 public bool AddEntity(List<T> entitys) 47 { 48 return dal.AddEntity(entitys); 49 } 50 #endregion 51 52 #region 2.Modify 53 /// <summary> 54 /// 修改一条数据,会修改所有列的值,没有赋值的属性将会被赋予属性类型的默认值************** 55 /// </summary> 56 /// <param name="entity"></param> 57 /// <returns></returns> 58 public bool ModifyEntity(T entity) 59 { 60 return dal.ModifyEntity(entity); 61 } 62 public bool ModifyEntity(List<T> entitys) 63 { 64 return dal.ModifyEntity(entitys); 65 } 66 /// <summary> 67 /// 修改一条数据,会修改指定列的值 68 /// </summary> 69 /// <param name="entity">要修改的实体对象</param> 70 /// <param name="proNames">要修改的属性名称</param> 71 /// <returns></returns> 72 public bool ModifyEntity(T entity, params string[] proNames) 73 { 74 return dal.ModifyEntity(entity, proNames); 75 } 76 /// <summary> 77 /// 根据条件批量修改指定的列******************** 78 /// </summary> 79 /// <param name="entity"></param> 80 /// <param name="whereLambds"></param> 81 /// <param name="proNames"></param> 82 /// <returns></returns> 83 public bool ModifyEntity(T entity, Expression<Func<T, bool>> whereLambds, params string[] proNames) 84 { 85 return dal.ModifyEntity(entity, whereLambds, proNames); 86 } 87 #endregion 88 89 #region 3.Delete 90 91 /// <summary> 92 /// 删除一个实体对象 93 /// </summary> 94 /// <param name="entity"></param> 95 /// <returns></returns> 96 public bool DeleteEntity(T entity) 97 { 98 return dal.DeleteEntity(entity); 99 }100 /// <summary>101 /// 根据条件批量删除实体对象102 /// </summary>103 /// <param name="whereLambds"></param>104 /// <returns></returns>105 public bool DeleteEntityByWhere(Expression<Func<T, bool>> whereLambds)106 {107 return dal.DeleteEntityByWhere(whereLambds);108 }109 /// <summary>110 /// 事务批量删除实体对象111 /// </summary>112 /// <param name="entitys"></param>113 /// <returns></returns>114 public bool DeleteEntitys(List<T> entitys)115 {116 return dal.DeleteEntitys(entitys);117 }118 private int Del(string ids)119 {120 int tag = 0;121 if (string.IsNullOrEmpty(ids))122 {123 tag++;124 }125 var idlist = ids.Split(new char[] { ‘,‘ }, StringSplitOptions.RemoveEmptyEntries).ToList();126 List<int> idInt = new List<int>();127 idlist.ForEach(c =>128 {129 int temp = 0;130 if (!int.TryParse(c, out temp))131 {132 tag++;133 }134 135 });136 return tag;137 }138 /// <summary>139 /// 批量软删除数据,也可以用作单个软删除--此方法适用于id为int类型且具有Deleted字段的表140 /// 如果删除单个数据格式为:整数格式 如 id=1。如果批量删除数据格式为:1,2,44 如 id=1,4,3。141 /// </summary>142 /// <param name="ids">ids格式:1,3,2</param>143 /// <returns></returns>144 public bool DeleteSoftById(string ids)145 { 146 if (Del(ids) > 0)147 {148 return false;149 }150 return dal.DeleteSoftEntitys(ids);151 }152 /// <summary>153 /// 批量(单个)物理删除数据---此方法适用于id为int类型的表154 ///如果删除单个数据格式为:整数格式 如 id=1。如果批量删除数据格式为:1,2,44 如 id=1,4,3。155 /// </summary>156 /// <param name="id">如果删除单个数据格式为:整数格式 如 id=1。如果批量删除数据格式为:1,2,44 如 id=1,4,3。</param>157 /// <returns></returns>158 public bool DeletePhysicsById(string ids)159 {160 161 if (Del(ids) > 0)162 {163 return false;164 }165 return dal.DeletePhysicsEntitys(ids);166 //return DeleteEntityByWhere(c => idInt.Contains(c.Id));167 }168 #endregion169 170 #region 4.Select171 //带条件查询172 public List<T> GetEntitys(Expression<Func<T, bool>> whereLambds)173 {174 return dal.GetEntitys(whereLambds);175 }176 //带排序查询177 public List<T> GetEntitys<S>(Expression<Func<T, bool>> whereLambds, bool isAsc, Expression<Func<T, S>> orderByLambds)178 {179 return dal.GetEntitys(whereLambds, isAsc, orderByLambds);180 }181 public List<T> GetEntitys(string sql, string where, string orderKey, params object[] paramss)182 {183 return dal.GetEntitys(sql, where, orderKey, paramss);184 }185 //带分页查询186 public List<T> GetPagedEntitys<S>(int pageIndex, int pageSize, out int rows, out int totalPage, Expression<Func<T, bool>> whereLambds, bool isAsc, Expression<Func<T, S>> orderByLambds)187 {188 return dal.GetPagedEntitys(pageIndex, pageSize, out rows, out totalPage, whereLambds, isAsc, orderByLambds);189 }190 191 /// <summary>192 /// 传统sql结合EF分页实现查询193 /// </summary>194 /// <param name="pageIndex"></param>195 /// <param name="pageSize"></param>196 /// <param name="rows"></param>197 /// <param name="totalPage"></param>198 /// <param name="sql">sql可为空:select * from 实体名</param>199 /// <param name="where">条件:and 字段=值</param>200 /// <param name="orderKey">排序:id desc,name asc</param>201 /// <param name="paramss">参数化查询时的可变参数</param>202 /// <returns></returns>203 public List<T> GetPagedEntitys(int pageIndex, int pageSize, out int rows, out int totalPage, string where, string orderKey, params object[] paramss)204 {205 206 return dal.GetPagedEntitys(pageIndex, pageSize, out rows, out totalPage, where, orderKey, paramss);207 208 }209 #endregion210 }211 }
然后新建实体对于的BLL,继承BaseBLL<T>
1 using DataAccess.DAL; 2 using Domain.Entity; 3 using System; 4 using System.Collections.Generic; 5 using System.Linq; 6 using System.Text; 7 using System.Threading.Tasks; 8 9 namespace BusinessLogic.BLL10 {11 public class Public_AdPositionBLL : BaseBLL<T_Public_AdPosition>12 {13 private Public_AdPositionDAL Public_AdPositionDAL = null;14 public override void SetDAL()15 { 16 Public_AdPositionDAL = Infrastructure.Ioc.DALFactory.Public_AdPositionDAL;17 dal = Public_AdPositionDAL;18 }19 }20 }
我们在BusinessLogic.BLL上放个BLLFactory类,让UI层从这个类中取数据。
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 7 namespace BusinessLogic.BLL 8 { 9 public class BLLFactory10 {11 private BLLFactory() { }12 public static readonly Public_SettingBLL Public_SettingBLL = new Public_SettingBLL();13 public static readonly Public_AdPositionBLL Public_AdPositionBLL = new Public_AdPositionBLL();14 }15 }
下一步就是UI层的处理了~~~~~未完待续
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。