EntityFreamWork 项目总结
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了EntityFreamWork 项目总结相关的知识,希望对你有一定的参考价值。
前段时间一直在忙着处理一个B2C的商城项目,未来得整理这次项目的心得,今天偶有空闲便写下这篇文章以记录整个项目的设计及自我总结。
这个项目是我综合传智播客教学基础将传统三层架构与EntityFramework进行整合,其中如有不对之处,还望各位高手指点。
一、项目结构:经典三层+EF
首先,先说说整个项目的结构。该项目使用 Visual Studio2013+EF4.4 来进行开发,可能有同学会说,EF6都出来了,为什么还使用4.4版本?
原因二、windows 2003 只支持到 .net 4.0
API:主要用于支持第三方扩展,比如支付和登录。
BLL层:业务逻辑处理层。
Common:公用方法封装。
DAL层:数据访问层。
DBSessionFactory:数据访问会话层,主要用于DAL和数据库之间的连接。
DBUtility:常规三层中ADO.Net 方式与数据库的连接。
Interface:封装了BLL调用DAL中的IBLL接口,及DAL中方法调用DBSession时其中的基本的CURD的方法的接口。
Web.UI:表现层与业务逻辑层之间调用方法的封装。
Web:表现层。数据来源于UI及BLL层中。
二、数据库主要结构
主要表结构设计为:订单模块、会员模块、商品模块、文章模块、后台管理模块和其他一些表的设计。
三、各个模块的功能介绍
1.DBSessionFactory模块。
DBsession主要用于数据库的交互,进行保存数据或者查询数据。
1 /// <summary> 2 /// 封装的数据操作类 3 /// </summary> 4 public partial class DBSession 5 { 6 /// <summary> 7 /// EF上下文对象,由工厂创建 8 /// </summary> 9 DbContext dbContext=TDB2C.DbContextFacory.DbContextFactory.GetDbContext(); 10 /// <summary> 11 /// 执行特殊SQL语句或存储过程 12 /// </summary> 13 /// <param name="sql">Sql语句或存储过程</param> 14 /// <param name="parameters">参数数组</param> 15 /// <returns>返回影响行数</returns> 16 public int ExecutNoneQuery(string sql, SqlParameter[] parameters) 17 { 18 return dbContext.Database.ExecuteSqlCommand(sql, parameters); 19 } 20 /// <summary> 21 /// 执行SQL语句,返回指定类型的对象集合 22 /// </summary> 23 /// <typeparam name="T"></typeparam> 24 /// <param name="sql"></param> 25 /// <param name="parameters"></param> 26 /// <returns></returns> 27 public List<T> ExecutDataTable<T>(string sql, SqlParameter[] parameters) 28 { 29 return dbContext.Database.SqlQuery<T>(sql, parameters).ToList(); 30 } 31 /// <summary> 32 /// 将所有操作一次性保存会数据库,避免频繁连接和操作数据库 33 /// </summary> 34 /// <returns></returns> 35 public int SaveChanges() 36 { 37 try 38 { 39 return dbContext.SaveChanges(); 40 } 41 catch(Exception ex) 42 { 43 TDB2C.Common.LogHelper.LogFatal(ex.Message, ex); 44 throw ex; 45 } 46 } 47 }
AbstructFacotry.tt 主要用于反射出 DAL对象与DBSession层之间的 IDAL 对象。
2.Interface中两个接口。
IDAL 接口: 将数据库中的常用方法进行抽象。具体实现交给DAL层来完成。
1 public interface IBaseDAL<T> where T:class,new() 2 { 3 /// <summary> 4 /// 根据条件,获取当个对象,带排序 5 /// </summary> 6 T LoadEntity(Expression<Func<T, bool>> whereLambda, params OrderModelField[] orderByExpression); 7 /// <summary> 8 /// 获取满足条件的所有数据 9 /// </summary> 10 IQueryable<T> LoadEntities(Expression<Func<T, bool>> whereLambda, params OrderModelField[] orderByExpression); 11 /// <summary> 12 /// 获取前几条数据,根据条件,排序条件,数量 13 /// </summary> 14 IQueryable<T> LoadEntities(int top, Expression<Func<T, bool>> whereLambda, params OrderModelField[] orderByExpression); 15 /// <summary> 16 /// 获取分页数据,根据过滤条件,排序条件,页码,页容量, 17 /// </summary> 18 IQueryable<T> LoadEntities(int pageIndex, int pageSize, out int totalCount, Expression<Func<T, bool>> whereLambda, params OrderModelField[] orderByExpression); 19 /// <summary> 20 /// 增加新实体 21 /// </summary> 22 T AddEntity(T entity); 23 /// <summary> 24 /// 删除该实体 25 /// </summary> 26 void DeleteEntity(T entity); 27 /// <summary> 28 /// 修改实体 29 /// </summary> 30 void UpdateEntity(T entity); 31 32 #region 聚合函数 33 /// <summary> 34 /// 统计合计,若统计字段中包含null值,则不计入运算结果 35 /// </summary> 36 /// <param name="whereLambda">过滤条件 Lambda表达式</param> 37 /// <param name="fieldLambda">选择字段的 Lambda表达式</param> 38 /// <returns>返回合计值</returns> 39 int? GetSum(Expression<Func<T, bool>> whereLambda, Expression<Func<T, int?>> fieldLambda); 40 /// <summary> 41 /// 统计合计,若统计字段中包含null值,则不计入运算结果 42 /// </summary> 43 /// <param name="whereLambda">过滤条件 Lambda表达式</param> 44 /// <param name="fieldLambda">选择字段的 Lambda表达式</param> 45 /// <returns>返回合计值</returns> 46 decimal? GetSum(Expression<Func<T, bool>> whereLambda, Expression<Func<T, decimal?>> fieldLambda); 47 /// <summary> 48 /// 获得最大值,若统计字段中包含null值,则不计入运算结果 49 /// </summary> 50 /// <param name="whereLambda">过滤条件 Lambda表达式</param> 51 /// <param name="fieldLambda">选择字段的 Lambda表达式</param> 52 /// <returns>返回最大值</returns> 53 int? GetMax(Expression<Func<T, bool>> whereLambda, Expression<Func<T, int?>> fieldLambda); 54 /// <summary> 55 /// 获得最大值,若统计字段中包含null值,则不计入运算结果 56 /// </summary> 57 /// <param name="whereLambda">过滤条件 Lambda表达式</param> 58 /// <param name="fieldLambda">选择字段的 Lambda表达式</param> 59 /// <returns>返回最大值</returns> 60 decimal? GetMax(Expression<Func<T, bool>> whereLambda, Expression<Func<T, decimal?>> fieldLambda); 61 /// <summary> 62 /// 获得最小值,若统计字段中包含null值,则不计入运算结果 63 /// </summary> 64 /// <param name="whereLambda">过滤条件 Lambda表达式</param> 65 /// <param name="fieldLambda">选择字段的 Lambda表达式</param> 66 /// <returns>返回最小值</returns> 67 int? GetMin(Expression<Func<T, bool>> whereLambda, Expression<Func<T, int?>> fieldLambda); 68 /// <summary> 69 /// 获得最小值,若统计字段中包含null值,则不计入运算结果 70 /// </summary> 71 /// <param name="whereLambda">过滤条件 Lambda表达式</param> 72 /// <param name="fieldLambda">选择字段的 Lambda表达式</param> 73 /// <returns>返回最小值</returns> 74 decimal? GetMin(Expression<Func<T, bool>> whereLambda, Expression<Func<T, decimal?>> fieldLambda); 75 /// <summary> 76 /// 获得平均值,若统计字段中包含null值,则不计入运算结果 77 /// </summary> 78 /// <param name="whereLambda">过滤条件 Lambda表达式</param> 79 /// <param name="fieldLambda">选择字段的 Lambda表达式</param> 80 /// <returns>返回平均值</returns> 81 int? GetAverage(Expression<Func<T, bool>> whereLambda, Expression<Func<T, int?>> fieldLambda); 82 /// <summary> 83 /// 获得平均值,若统计字段中包含null值,则不计入运算结果 84 /// </summary> 85 /// <param name="whereLambda">过滤条件 Lambda表达式</param> 86 /// <param name="fieldLambda">选择字段的 Lambda表达式</param> 87 /// <returns>返回平均值</returns> 88 decimal? GetAverage(Expression<Func<T, bool>> whereLambda, Expression<Func<T, decimal?>> fieldLambda); 89 90 91 92 /// <summary> 93 /// 统计合计,若统计字段中包含null值,则抛异常 94 /// </summary> 95 /// <param name="whereLambda">过滤条件 Lambda表达式</param> 96 /// <param name="fieldLambda">选择字段的 Lambda表达式</param> 97 /// <returns>返回合计值</returns> 98 int GetSum(Expression<Func<T, bool>> whereLambda, Expression<Func<T, int>> fieldLambda); 99 /// <summary> 100 /// 统计合计,若统计字段中包含null值,则抛异常 101 /// </summary> 102 /// <param name="whereLambda">过滤条件 Lambda表达式</param> 103 /// <param name="fieldLambda">选择字段的 Lambda表达式</param> 104 /// <returns>返回合计值</returns> 105 decimal GetSum(Expression<Func<T, bool>> whereLambda, Expression<Func<T, decimal>> fieldLambda); 106 /// <summary> 107 /// 获得最大值,若统计字段中包含null值,则抛异常 108 /// </summary> 109 /// <param name="whereLambda">过滤条件 Lambda表达式</param> 110 /// <param name="fieldLambda">选择字段的 Lambda表达式</param> 111 /// <returns>返回最大值</returns> 112 int GetMax(Expression<Func<T, bool>> whereLambda, Expression<Func<T, int>> fieldLambda); 113 /// <summary> 114 /// 获得最大值,若统计字段中包含null值,则抛异常 115 /// </summary> 116 /// <param name="whereLambda">过滤条件 Lambda表达式</param> 117 /// <param name="fieldLambda">选择字段的 Lambda表达式</param> 118 /// <returns>返回最大值</returns> 119 decimal GetMax(Expression<Func<T, bool>> whereLambda, Expression<Func<T, decimal>> fieldLambda); 120 /// <summary> 121 /// 获得最小值,若统计字段中包含null值,则抛异常 122 /// </summary> 123 /// <param name="whereLambda">过滤条件 Lambda表达式</param> 124 /// <param name="fieldLambda">选择字段的 Lambda表达式</param> 125 /// <returns>返回最小值</returns> 126 int GetMin(Expression<Func<T, bool>> whereLambda, Expression<Func<T, int>> fieldLambda); 127 /// <summary> 128 /// 获得最小值,若统计字段中包含null值,则抛异常 129 /// </summary> 130 /// <param name="whereLambda">过滤条件 Lambda表达式</param> 131 /// <param name="fieldLambda">选择字段的 Lambda表达式</param> 132 /// <returns>返回最小值</returns> 133 decimal GetMin(Expression<Func<T, bool>> whereLambda, Expression<Func<T, decimal>> fieldLambda); 134 /// <summary> 135 /// 获得平均值,若统计字段中包含null值,则抛异常 136 /// </summary> 137 /// <param name="whereLambda">过滤条件 Lambda表达式</param> 138 /// <param name="fieldLambda">选择字段的 Lambda表达式</param> 139 /// <returns>返回平均值</returns> 140 int GetAverage(Expression<Func<T, bool>> whereLambda, Expression<Func<T, int>> fieldLambda); 141 /// <summary> 142 /// 获得平均值,若统计字段中包含null值,则抛异常 143 /// </summary> 144 /// <param name="whereLambda">过滤条件 Lambda表达式</param> 145 /// <param name="fieldLambda">选择字段的 Lambda表达式</param> 146 /// <returns>返回平均值</returns> 147 decimal GetAverage(Expression<Func<T, bool>> whereLambda, Expression<Func<T, decimal>> fieldLambda); 148 149 150 151 152 /// <summary> 153 /// 获得指定条件统计结果 154 /// </summary> 155 /// <param name="whereLambda">过滤条件 Lambda表达式</param> 156 /// <returns></returns> 157 int GetCount(Expression<Func<T, bool>> whereLambda); 158 159 #endregion 160 161 /// <summary> 162 /// 查找是否存在 163 /// </summary> 164 bool ExistsEntity(Expression<Func<T, bool>> whereLabmda); 165 /// <summary> 166 /// 查找是否存在 167 /// </summary> 168 bool ExistsEntity(int id); 169 }
IBLL接口: 将IDAL中的方法进行扩充,然后交给BLL中去具体实现。
1 /// <summary> 2 /// 业务逻辑接口层(Business Logic Layer InterFace),供表现层和业务逻辑层使用 3 /// </summary> 4 /// <typeparam name="T"></typeparam> 5 public interface IBaseBLL<T> where T:class,new() 6 { 7 8 /// <summary> 9 /// 获取指定对象,根据主键Id 10 /// </summary> 11 /// <param name="id">主键</param> 12 /// <returns>获取到的对象,不存在则为Null</returns> 13 T LoadEntity(int id); 14 /// <summary> 15 /// 获取指定对象,根据过滤条件字符串 16 /// </summary> 17 /// <param name="strWhere">过滤条件 where条件字符串</param> 18 /// <returns>获取到的对象,不存在则为Null</returns> 19 T LoadEntity(string strWhere); 20 /// <summary> 21 /// 获取指定对象,根据过滤条件字符串,带排序 22 /// </summary> 23 /// <param name="strWhere">过滤条件 where条件字符串</param> 24 /// <param name="fieldOrder">排序字符串 格式为:"id desc" 或者 "sort_id asc,add_time desc,....,id asc" 或者""</param> 25 /// <returns>获取到的对象,不存在则为Null</returns> 26 T LoadEntity(string strWhere, string fieldOrder); 27 /// <summary> 28 /// 获取指定对象,根据过滤条件Lambda表达式 29 /// </summary> 30 /// <param name="whereLambda">过滤条件 Lambda表达式</param> 31 /// <returns>获取到的对象,不存在则为Null</returns> 32 T LoadEntity(Expression<Func<T, bool>> whereLambda); 33 /// <summary> 34 /// 获取指定对象,根据过滤条件Lambda表达式,带排序 35 /// </summary> 36 /// <param name="whereLambda">过滤条件 Lambda表达式</param> 37 /// <param name="fieldOrder">排序字符串 格式为:"id desc" 或者 "sort_id asc,add_time desc,....,id asc" 或者""</param> 38 /// <returns>获取到的对象,不存在则为Null</returns> 39 T LoadEntity(Expression<Func<T, bool>> whereLambda, string fieldOrder); 40 41 /// <summary> 42 /// 获取对象集合,根据过滤条件字符串 43 /// </summary> 44 /// <param name="strWhere">过滤条件 where条件字符串</param> 45 /// <returns>获取到的对象集合,不存在则为new List()</returns> 46 List<T> LoadEntities(string strWhere); 47 /// <summary> 48 /// 获取对象集合,根据过滤条件字符串,带排序 49 /// </summary> 50 /// <param name="strWhere">过滤条件 where条件字符串</param> 51 /// <param name="fieldOrder">排序字符串 格式为:"id desc" 或者 "sort_id asc,add_time desc,....,id asc" 或者""</param> 52 /// <returns>获取到的对象集合,不存在则为new List()</returns> 53 List<T> LoadEntities(string strWhere, string fieldOrder); 54 55 /// <summary> 56 /// 获取对象集合,根据过滤条件Lambda表达式 57 /// </summary> 58 /// <param name="whereLambda">过滤条件 Lambda表达式</param> 59 /// <returns>获取到的对象集合,不存在则为new List()</returns> 60 List<T> LoadEntities(Expression<Func<T, bool>> whereLambda); 61 /// <summary> 62 /// 获取对象集合,根据过滤条件Lambda表达式,带排序 63 /// </summary> 64 /// <param name="whereLambda">过滤条件 Lambda表达式</param> 65 /// <param name="fieldOrder">排序字符串 格式为:"id desc" 或者 "sort_id asc,add_time desc,....,id asc" 或者""</param> 66 /// <returns>获取到的对象集合,不存在则为new List()</returns> 67 List<T> LoadEntities(Expression<Func<T, bool>> whereLambda, string fieldOrder); 68 69 /// <summary> 70 /// 获取前几条对象集合,根据过滤条件字符串 71 /// </summary> 72 /// <param name="top">指定记录数</param> 73 /// <param name="strWhere">过滤条件 where条件字符串</param> 74 /// <returns>获取到的对象集合,不存在则为new List()</returns> 75 List<T> LoadEntities(int top, string strWhere); 76 /// <summary> 77 /// 获取前几条对象集合,根据过滤条件字符串,带排序 78 /// </summary> 79 /// <param name="top">指定记录数</param> 80 /// <param name="strWhere">过滤条件 where条件字符串</param> 81 /// <param name="fieldOrder">排序字符串 格式为:"id desc" 或者 "sort_id asc,add_time desc,....,id asc" 或者""</param> 82 /// <returns>获取到的对象集合,不存在则为new List()</returns> 83 List<T> LoadEntities(int top, string strWhere, string fieldOrder); 84 85 /// <summary> 86 /// 获取前几条对象集合,根据过滤条件Lambda表达式 87 /// </summary> 88 /// <param name="top">指定记录数</param> 89 /// <param name="whereLambda">过滤条件 Lambda表达式</param> 90 /// <returns>获取到的对象集合,不存在则为new List()</returns> 91 List<T> LoadEntities(int top, Expression<Func<T, bool>> whereLambda); 92 /// <summary> 93 /// 获取前几条对象集合,根据过滤条件Lambda表达式,带排序 94 /// </summary> 95 /// <param name="top">指定记录数</param> 96 /// <param name="whereLambda">过滤条件 Lambda表达式</param> 97 /// <param name="fieldOrder">排序字符串 格式为:"id desc" 或者 "sort_id asc,add_time desc,....,id asc" 或者""</param> 98 /// <returns>获取到的对象
以上是关于EntityFreamWork 项目总结的主要内容,如果未能解决你的问题,请参考以下文章