你的位置:首页 > ASP.net教程

[ASP.net教程]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       try38       {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     #endregion160 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>获取到的对象集合,不存在则为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     #endregion382   }

View Code

  

  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     /// 主键Id19     /// </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的方法。