EntityFreamWork 项目总结

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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     }
View Code

 

  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 项目总结的主要内容,如果未能解决你的问题,请参考以下文章

项目开发收尾总结(片段)

VsCode 代码片段-提升研发效率

python常用代码片段总结

BootStrap有用代码片段(持续总结)

BootStrap实用代码片段(持续总结)

查看发票组代码后的总结和有感