EntityFreamWork 项目总结

  前段时间一直在忙着处理一个B2C的商城项目,未来得整理这次项目的心得,今天偶有空闲便写下这篇文章以记录整个项目的设计及自我总结。

这个项目是我综合传智播客教学基础将传统三层架构与EntityFramework进行整合,其中如有不对之处,还望各位高手指点。

   一、项目结构:经典三层+EF 

  首先,先说说整个项目的结构。该项目使用 Visual Studio2013+EF4.4 来进行开发,可能有同学会说,EF6都出来了,为什么还使用4.4版本?

    原因一、.net4.0只支持到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>获取到的对象集合,不存在则为new List()</returns>
 99         List<T> LoadEntities(int top, Expression<Func<T, bool>> whereLambda, string fieldOrder);
100
101         /// <summary>
102         /// 获取分页对象集合,根据过滤条件字符串
103         /// </summary>
104         /// <param name="pageIndex">当前页码</param>
105         /// <param name="pageSize">页容量</param>
106         /// <param name="totalCount">总记录数</param>
107         /// <param name="strWhere">过滤条件 where条件字符串</param>
108         /// <returns>获取到的对象集合,不存在则为new List()</returns>
109         List<T> LoadEntities(int pageIndex, int pageSize, out int totalCount, string strWhere);
110         /// <summary>
111         /// 获取分页对象集合,根据过滤条件字符串,带排序
112         /// </summary>
113         /// <param name="pageIndex">当前页码</param>
114         /// <param name="pageSize">页容量</param>
115         /// <param name="totalCount">总记录数</param>
116         /// <param name="strWhere">过滤条件 where条件字符串</param>
117         /// <param name="fieldOrder">排序字符串 格式为:"id desc" 或者 "sort_id asc,add_time desc,....,id asc" 或者""</param>
118         /// <returns>获取到的对象集合,不存在则为new List()</returns>
119         List<T> LoadEntities(int pageIndex, int pageSize, out int totalCount, string strWhere, string fieldOrder);
120
121         /// <summary>
122         /// 获取分页对象集合,根据过滤条件Lambda表达式
123         /// </summary>
124         /// <param name="pageIndex">当前页码</param>
125         /// <param name="pageSize">页容量</param>
126         /// <param name="totalCount">总记录数</param>
127         /// <param name="whereLambda">过滤条件 Lambda表达式</param>
128         /// <returns>获取到的对象集合,不存在则为new List()</returns>
129         List<T> LoadEntities(int pageIndex, int pageSize, out int totalCount, Expression<Func<T, bool>> whereLambda);
130         /// <summary>
131         /// 获取分页对象集合,根据过滤条件Lambda表达式,带排序
132         /// </summary>
133         /// <param name="pageIndex">当前页码</param>
134         /// <param name="pageSize">页容量</param>
135         /// <param name="totalCount">总记录数</param>
136         /// <param name="whereLambda">过滤条件 Lambda表达式</param>
137         /// <param name="fieldOrder">排序字符串 格式为:"id desc" 或者 "sort_id asc,add_time desc,....,id asc" 或者""</param>
138         /// <returns>获取到的对象集合,不存在则为new List()</returns>
139         List<T> LoadEntities(int pageIndex, int pageSize, out int totalCount, Expression<Func<T, bool>> whereLambda, string fieldOrder);
140
141
142         /// <summary>
143         /// 添加新实体,返回刚添加的实体
144         /// </summary>
145         /// <param name="entity">要添加的实体</param>
146         /// <returns>返回的添加成功后的实体</returns>
147         T AddEntity(T entity);
148         /// <summary>
149         /// 添加实体,返回添加成功的实体及成功数量
150         /// </summary>
151         /// <param name="entity">要添加的实体</param>
152         /// <param name="changes">成功记录数</param>
153         /// <returns>返回添加成功后的实体</returns>
154         T AddEntity(T entity, out int changes);
155         /// <summary>
156         /// 添加实体,返回添加成功的数量
157         /// </summary>
158         /// <param name="entity">要添加的实体</param>
159         /// <returns>添加成功的数量</returns>
160         int AddEntityChanges(T entity);
161
162         /// <summary>
163         /// 更新实体,返回是否成功
164         /// </summary>
165         /// <param name="entity">要更新的实体</param>
166         /// <returns>成功状态 true为成功,false为失败</returns>
167         bool UpdateEntity(T entity);
168
169         /// <summary>
170         /// 查找是否存在
171         /// </summary>
172         /// <param name="whereLabmda">过滤条件 Lambda表达式</param>
173         /// <returns>存在状态 true为存在,false为不存在</returns>
174         bool ExistsEntity(Expression<Func<T, bool>> whereLabmda);
175         /// <summary>
176         /// 查找是否存在
177         /// </summary>
178         /// <param name="strWhere">过滤条件 where条件字符串</param>
179         /// <returns>存在状态 true为存在,false为不存在</returns>
180         bool ExistsEntity(string strWhere);
181         /// <summary>
182         /// 查找是否存在
183         /// </summary>
184         /// <param name="id">对象主键Id</param>
185         /// <returns>存在状态 true为存在,false为不存在</returns>
186         bool ExistsEntity(int id);
187
188         /// <summary>
189         /// 修改指定对象的(一个或多个)字段值
190         /// </summary>
191         /// <param name="id">主键Id</param>
192         /// <param name="strValue">字段值,格式必须为"key=value"或"key1=value1&&key2=value2&&...&&keyN=valueN"</param>
193         /// <returns>返回成功状态 true为成功,false为失败</returns>
194         bool UpdateFieldsEntity(int id, string strValue);
195         /// <summary>
196         /// 修改满足条件的所有对象的(一个或多个)字段值
197         /// </summary>
198         /// <param name="whereLambda">过滤条件 Lambda表达式</param>
199         /// <param name="strValue">字段值,格式必须为"key=value"或"key1=value1&&key2=value2&&...&&keyN=valueN"</param>
200         /// <returns>返回成功状态 true为成功,false为失败</returns>
201         bool UpdateFieldsEntity(Expression<Func<T, bool>> whereLambda, string strValue);
202         /// <summary>
203         /// 根据条件,修改满足条件的所以的对象的(一个或多个)字段值
204         /// </summary>
205         /// <param name="strWhere">过滤条件 where条件字符串</param>
206         /// <param name="strValue">字段值,格式必须为"key=value"或"key1=value1&&key2=value2&&...&&keyN=valueN"</param>
207         /// <returns>返回成功状态 true为成功,false为失败</returns>
208         bool UpdateFieldsEntity(string strWhere, string strValue);
209
210         /// <summary>
211         /// 软删除实体
212         /// </summary>
213         /// <param name="id">主键Id</param>
214         /// <returns>返回成功状态 true为成功,false为失败</returns>
215         bool DeleteSoftEntity(int id);
216         /// <summary>
217         /// 软删除实体,删除满足Lambda条件的实体对象
218         /// </summary>
219         /// <param name="whereLambda">过滤条件 Lambda表达式</param>
220         /// <returns>返回成功状态 true为成功,false为失败</returns>
221         bool DeleteSoftEntity(Expression<Func<T, bool>> whereLambda);
222         /// <summary>
223         /// 软删除实体,删除满足条件的实体对象
224         /// </summary>
225         /// <param name="strWhere">过滤条件 where条件字符串</param>
226         /// <returns>返回成功状态 true为成功,false为失败</returns>
227         bool DeleteSoftEntity(string strWhere);
228
229         /// <summary>
230         /// 真删除实体
231         /// </summary>
232         /// <param name="id">主键Id</param>
233         /// <returns>返回成功状态 true为成功,false为失败</returns>
234         bool DeleteEntity(int id);
235         /// <summary>
236         /// 真删除实体,删除满足Lambda条件的实体对象
237         /// </summary>
238         /// <param name="whereLambda">过滤条件 Lambda表达式</param>
239         /// <returns>返回成功状态 true为成功,false为失败</returns>
240         bool DeleteEntity(Expression<Func<T, bool>> whereLambda);
241         /// <summary>
242         /// 真删除实体,返回是否成功
243         /// </summary>
244         /// <param name="entity">要删除的实体</param>
245         /// <returns>成功状态 true为成功,false为失败</returns>
246         bool DeleteEntity(T entity);
247         /// <summary>
248         /// 真删除实体,返回是否成功
249         /// </summary>
250         /// <param name="strWhere">过滤条件 where条件字符串</param>
251         /// <returns>成功状态 true为成功,false为失败</returns>
252         bool DeleteEntity(string strWhere);
253         #region 聚合函数
254
255         /// <summary>
256         /// 统计合计,若统计字段中包含null值,则不计入运算结果
257         /// </summary>
258         /// <param name="whereLambda">过滤条件 Lambda表达式</param>
259         /// <param name="fieldLambda">选择字段的 Lambda表达式</param>
260         /// <returns>返回合计值</returns>
261         int? GetSum(Expression<Func<T, bool>> whereLambda, Expression<Func<T, int?>> fieldLambda);
262         /// <summary>
263         /// 统计合计,若统计字段中包含null值,则不计入运算结果
264         /// </summary>
265         /// <param name="whereLambda">过滤条件 Lambda表达式</param>
266         /// <param name="fieldLambda">选择字段的 Lambda表达式</param>
267         /// <returns>返回合计值</returns>
268         decimal? GetSum(Expression<Func<T, bool>> whereLambda, Expression<Func<T, decimal?>> fieldLambda);
269         /// <summary>
270         /// 获得最大值,若统计字段中包含null值,则不计入运算结果
271         /// </summary>
272         /// <param name="whereLambda">过滤条件 Lambda表达式</param>
273         /// <param name="fieldLambda">选择字段的 Lambda表达式</param>
274         /// <returns>返回最大值</returns>
275         int? GetMax(Expression<Func<T, bool>> whereLambda, Expression<Func<T, int?>> fieldLambda);
276         /// <summary>
277         /// 获得最大值,若统计字段中包含null值,则不计入运算结果
278         /// </summary>
279         /// <param name="whereLambda">过滤条件 Lambda表达式</param>
280         /// <param name="fieldLambda">选择字段的 Lambda表达式</param>
281         /// <returns>返回最大值</returns>
282         decimal? GetMax(Expression<Func<T, bool>> whereLambda, Expression<Func<T, decimal?>> fieldLambda);
283         /// <summary>
284         /// 获得最小值,若统计字段中包含null值,则不计入运算结果
285         /// </summary>
286         /// <param name="whereLambda">过滤条件 Lambda表达式</param>
287         /// <param name="fieldLambda">选择字段的 Lambda表达式</param>
288         /// <returns>返回最小值</returns>
289         int? GetMin(Expression<Func<T, bool>> whereLambda, Expression<Func<T, int?>> fieldLambda);
290         /// <summary>
291         /// 获得最小值,若统计字段中包含null值,则不计入运算结果
292         /// </summary>
293         /// <param name="whereLambda">过滤条件 Lambda表达式</param>
294         /// <param name="fieldLambda">选择字段的 Lambda表达式</param>
295         /// <returns>返回最小值</returns>
296         decimal? GetMin(Expression<Func<T, bool>> whereLambda, Expression<Func<T, decimal?>> fieldLambda);
297         /// <summary>
298         /// 获得平均值,若统计字段中包含null值,则不计入运算结果
299         /// </summary>
300         /// <param name="whereLambda">过滤条件 Lambda表达式</param>
301         /// <param name="fieldLambda">选择字段的 Lambda表达式</param>
302         /// <returns>返回平均值</returns>
303         int? GetAverage(Expression<Func<T, bool>> whereLambda, Expression<Func<T, int?>> fieldLambda);
304         /// <summary>
305         /// 获得平均值,若统计字段中包含null值,则不计入运算结果
306         /// </summary>
307         /// <param name="whereLambda">过滤条件 Lambda表达式</param>
308         /// <param name="fieldLambda">选择字段的 Lambda表达式</param>
309         /// <returns>返回平均值</returns>
310         decimal? GetAverage(Expression<Func<T, bool>> whereLambda, Expression<Func<T, decimal?>> fieldLambda);
311
312
313         /// <summary>
314         /// 统计合计,若统计字段中包含null值,则抛异常
315         /// </summary>
316         /// <param name="whereLambda">过滤条件 Lambda表达式</param>
317         /// <param name="fieldLambda">选择字段的 Lambda表达式</param>
318         /// <returns>返回合计值</returns>
319         int GetSum(Expression<Func<T, bool>> whereLambda, Expression<Func<T, int>> fieldLambda);
320         /// <summary>
321         /// 统计合计,若统计字段中包含null值,则抛异常
322         /// </summary>
323         /// <param name="whereLambda">过滤条件 Lambda表达式</param>
324         /// <param name="fieldLambda">选择字段的 Lambda表达式</param>
325         /// <returns>返回合计值</returns>
326         decimal GetSum(Expression<Func<T, bool>> whereLambda, Expression<Func<T, decimal>> fieldLambda);
327         /// <summary>
328         /// 获得最大值,若统计字段中包含null值,则抛异常
329         /// </summary>
330         /// <param name="whereLambda">过滤条件 Lambda表达式</param>
331         /// <param name="fieldLambda">选择字段的 Lambda表达式</param>
332         /// <returns>返回最大值</returns>
333         int GetMax(Expression<Func<T, bool>> whereLambda, Expression<Func<T, int>> fieldLambda);
334         /// <summary>
335         /// 获得最大值,若统计字段中包含null值,则抛异常
336         /// </summary>
337         /// <param name="whereLambda">过滤条件 Lambda表达式</param>
338         /// <param name="fieldLambda">选择字段的 Lambda表达式</param>
339         /// <returns>返回最大值</returns>
340         decimal GetMax(Expression<Func<T, bool>> whereLambda, Expression<Func<T, decimal>> fieldLambda);
341         /// <summary>
342         /// 获得最小值,若统计字段中包含null值,则抛异常
343         /// </summary>
344         /// <param name="whereLambda">过滤条件 Lambda表达式</param>
345         /// <param name="fieldLambda">选择字段的 Lambda表达式</param>
346         /// <returns>返回最小值</returns>
347         int GetMin(Expression<Func<T, bool>> whereLambda, Expression<Func<T, int>> fieldLambda);
348         /// <summary>
349         /// 获得最小值,若统计字段中包含null值,则抛异常
350         /// </summary>
351         /// <param name="whereLambda">过滤条件 Lambda表达式</param>
352         /// <param name="fieldLambda">选择字段的 Lambda表达式</param>
353         /// <returns>返回最小值</returns>
354         decimal GetMin(Expression<Func<T, bool>> whereLambda, Expression<Func<T, decimal>> fieldLambda);
355         /// <summary>
356         /// 获得平均值,若统计字段中包含null值,则抛异常
357         /// </summary>
358         /// <param name="whereLambda">过滤条件 Lambda表达式</param>
359         /// <param name="fieldLambda">选择字段的 Lambda表达式</param>
360         /// <returns>返回平均值</returns>
361         int GetAverage(Expression<Func<T, bool>> whereLambda, Expression<Func<T, int>> fieldLambda);
362         /// <summary>
363         /// 获得平均值,若统计字段中包含null值,则抛异常
364         /// </summary>
365         /// <param name="whereLambda">过滤条件 Lambda表达式</param>
366         /// <param name="fieldLambda">选择字段的 Lambda表达式</param>
367         /// <returns>返回平均值</returns>
368         decimal GetAverage(Expression<Func<T, bool>> whereLambda, Expression<Func<T, decimal>> fieldLambda);
369         /// <summary>
370         /// 根据条件获得记录数
371         /// </summary>
372         /// <param name="whereLambda">过滤条件 Lambda表达式</param>
373         /// <returns>记录数</returns>
374         int GetCount(Expression<Func<T, bool>> whereLambda);
375         /// <summary>
376         /// 根据条件获得记录数
377         /// </summary>
378         /// <param name="strWhere">过滤条件 where字符串</param>
379         /// <returns>记录数</returns>
380         int GetCount(string strWhere);
381         #endregion
382     }

  

  3.DAL层

  

  DAL层中,定义了泛型约束的基类,所有的Model 继承BaseDAL,里面显示实现了所有的IDAL,具体实现就不贴出来了。

1 public class BaseDAL<T> where T:class,new()
2 {
3   //代码的具体实现...
4 }

  4.同样的BLL层中 也是定义相同的泛型约束基类,所有的Model继承BaseBLL,显示实现所有IBLL中定义的方法。

1 public class BaseBLL<T> where T:class,new()
2 {
3   //代码的具体实现...
4 }

  

  四、总结

  这次的项目EntityFrameWork的使用方式依然是 DBFirst模式,在数据库中建立表结构之后,生成对应的Model,这里我将原始的T4文件进行了修改,支持将数据库中表名称,字段备注说明,一并生成到Model中,如:

 1     /// <summary>
 2     /// 商品评论参数 标签表
 3     /// </summary>
 4     [Serializable]
 5     public partial class Product_comment_merit:IModel
 6     {
 7        public Product_comment_merit()
 8         {
 9             this.Id=0;
10                    this.Product_category_ids="";
11                    this.Title="";
12                    this.Sort_id=0;
13                    this.Add_time=DateTime.Now;
14                    this.Is_del=0;
15                }
16
17         /// <summary>
18         /// 主键Id
19         /// </summary>
20         public int Id { get; set; }
21         /// <summary>
22         /// 所属分类
23         /// </summary>
24         public string Product_category_ids { get; set; }
25         /// <summary>
26         /// 标题
27         /// </summary>
28         public string Title { get; set; }
29         /// <summary>
30         /// 排序
31         /// </summary>
32         public int Sort_id { get; set; }
33         /// <summary>
34         /// 添加时间
35         /// </summary>
36         public DateTime Add_time { get; set; }
37         /// <summary>
38         /// 删除标识
39         /// </summary>
40         public int Is_del { get; set; }
41     }

  model.tt文件,将数据库中的关系,映射成C#中的model,并保留字段备注,表说明。

  所有BLL中的类,都继承了BaseBLL,所以每一个业务逻辑都有IBLL中的 52个方法,这些方法基本涵盖了所有常规的数据操作。

  自己所特有的业务逻辑在单独编写,因为T4模版生成出来的Class 都是partial 的。

  整体实现的功能为, 新建立某个关系模型,重新运行T4模版文件,则 就拥有了该对象的 IBLL中的 52个常用 CRUD的方法。

时间: 2024-10-11 16:50:47

EntityFreamWork 项目总结的相关文章

Win10下IIS配置、项目发布、添加网站

Win10下IIS配置 1.找到控制面板:[开始]菜单鼠标右击,打开[控制面板] 2.打开控制面板,点击[程序],点击[启用或关闭Windows功能] 下一步,点击[启用虎关闭Windows功能] 3. 开始修改IIS了,我是这样勾上的,有可能比较多. 4. 验证IIS是否正确安装,等待几分钟后IIS配置完成.在浏览器输入http://localhost/iisstart.htm会出现 IIS安装成功页面.第一次修改的时候出现了成功页面,但是后来删除了IIS中默认的网站就打不开了,但是不影响的.

使用 IDEA 创建 Maven Web 项目 (异常)- Disconnected from the target VM, address: &#39;127.0.0.1:59770&#39;, transport: &#39;socket&#39;

运行环境: JDK 版本:1.8 Maven 版本:apache-maven-3.3.3 IDEA 版本:14 maven-jetty-plugin 配置: <plugin> <groupId>org.eclipse.jetty</groupId> <artifactId>jetty-maven-plugin</artifactId> <configuration> <webAppSourceDirectory>${pro

MyEclipse建立SpringMVC入门HelloWorld项目

一.首先,建立空的web project项目: 1. 2. 3. 二.其次,导入先关jar包 1.将jar包导入SpringMVCHelloWorld\WebRoot\WEB-INF\lib目录下 三.接下来修改web.xml文件,在web中,指定我们的DispatcherServlet.(从这里进入SpringMVC的可控范围). 1. 2.web.xml中的内容如下: <?xml version="1.0" encoding="UTF-8"?> &l

如何用 Android Studio 导入开源项目以及常见错误的解决办法

声明:这篇文章完全来自这篇文章,感谢大神的相助.这篇文章纯粹是为了备份. 本篇以Github上最热门的MaterialDesign库,MaterialDesignLibrary来介绍怎样使用Android Sudio导入开源项目的,如果你和我一样刚刚从Eclipse转到AS,那本篇文章非常适合你. 如果不引入任何第三方库,不做自动化分渠道打包等操作,那可以在完全不了解Gradle的情况下进行Android项目的开发.但如果要想导入Github上的热门项目,必须首先熟悉Gradle. 1. Gra

【机器学习实战】Machine Learning in Action 代码 视频 项目案例

MachineLearning 欢迎任何人参与和完善:一个人可以走的很快,但是一群人却可以走的更远 Machine Learning in Action (机器学习实战) | ApacheCN(apache中文网) 视频每周更新:如果你觉得有价值,请帮忙点 Star[后续组织学习活动:sklearn + tensorflow] ApacheCN - 学习机器学习群[629470233] 第一部分 分类 1.) 机器学习基础 2.) k-近邻算法 3.) 决策树 4.) 基于概率论的分类方法:朴素

git 把本地创建的项目放到github上

很早之前就注册了Github,但对其使用一直懵懵懂懂,很不熟练.直到昨天做完百度前端技术学院的task,想把代码托管到Github上的时候发现自己对于Git的操作是如此之愚钝,所以今天决定把Git好好学习一遍,好让自己以后能更好地使用Github,主要还是通过Git教程 - 廖雪峰的官方网站来学习.简要步骤可以直接看最后的总结. Git的安装就不说了. 第一步:我们需要先创建一个本地的版本库(其实也就是一个文件夹). 你可以直接右击新建文件夹,也可以右击打开Git bash命令行窗口通过命令来创

eclipse部署tomcat修改项目访问路径(虚拟路径)

原文参考: http://www.educity.cn/wenda/147993.html http://blog.163.com/java_zf/blog/static/19926038420129240314546/ tomcat部署web项目(eclipse自动部署项目到tomcat,访问URL中不包含部署名) 最近项目中需要把项目部署到tomcat中,并且访问路径中不包含不署名,且想实现Eclipse中的自动部署,扒了好久资料,最终实现了自己的需求,呵呵,如下: 1. 把项目contex

配置resin web方式部署项目

写在前面,推荐下载resin4.0.47版本.其它版本没有测试 最近打算做一个小项目,然后容器选用了resin.想通过web提交war文件的方式 进行部署,更新代码也方便. 试了resin最新的版本(目前最新版本为4.0.53),提交war文件到webapps下面都是.tmp文件.百度google一通还是没找到解决办法. 看了下公司用的resin版本,选择4.0.47.下载后发现没最新版本的上传问题. 通过web提交war文件方式步骤如下: 步骤一:修改resin.properties.推荐配置

jsp获取当前项目跟路径

在jsp中获取当前项目的根路径: <% String basePath = request.getScheme() + "://"+ request.getServerName() + ":" + request.getServerPort() + request.getContextPath() + "/";%> 可以使用${basePath}获取.