当前位置: 首页 > news >正文

石家庄外贸网站建设深圳公司注册材料

石家庄外贸网站建设,深圳公司注册材料,襄阳集团网站建设,北京网站设计首选 新鸿儒新人刚开始学习ASP.NET MVC#xff0c;若有不足之处希望能得到您的指点#xff0c;不胜感激#xff01; 先来一张项目的层级结构图: Model#xff1a;模型层#xff0c;主要是各种类型、枚举以及ORM框架#xff0c;框架完成数据库和实体类的映射。项目中选用了微软的开源…       新人刚开始学习ASP.NET MVC若有不足之处希望能得到您的指点不胜感激          先来一张项目的层级结构图:       Model模型层主要是各种类型、枚举以及ORM框架框架完成数据库和实体类的映射。项目中选用了微软的开源ORM框架 EntityFramework 6.0 以下简称EF数据库则选择了微软的轻量级数据库SQL Server Compact 4.0本地数据库简称CompactCompact对EF支持比较完美又属于文档型数据库部署起来比较简洁。       DAL数据访问层主要是对数据库的操作层为业务逻辑层或表示层提供数据服务。       IDAL数据访问接口层是数据访问层的接口降低耦合。       DALFactory数据会话层封装了所有数据操作类实例的创建将数据访问层与业务逻辑层解耦。       BLL业务逻辑层主要负责对数据层的操作把一些数据层的操作进行组合以完成业务的需要。       IBLL业务逻辑接口层业务逻辑层的接口降低耦合。       WebApp表现层是一个ASP.NET MVC项目完成具体网站的实现。       Common通用层用来存放一些工具类。       下面是各个层级之间具体的实现首先创建以 项目名.层级名 命名的各个层次除WebApp层为ASP.NET MVC项目外其余均创建为类库项目。           模型层的构建       先建立模型层新建ASP.NET 实体数据模型关联到已经设计好的数据库EF自动完成模型类的创建。   数据访问层的构建       DAL层中我们首先需要一个方法来获取单例的EF数据操纵上下文对象以保证每个用户访问时只有使用一个上下文对象对数据库进行操作。DbContextFactory.cs using System.Data.Entity; using System.Runtime.Remoting.Messaging; using PMS.Model;namespace PMS.DAL {public class DbContextFactory{/// summary/// 负责创建EF数据操作上下文实例,必须保证线程内唯一/// /summarypublic static DbContext CreateContext(){DbContext dbContext (DbContext)CallContext.GetData(dbContext);if (dbContext ! null) return dbContext;dbContext new PMSEntities();CallContext.SetData(dbContext, dbContext);return dbContext;}} }       为User类创建DAL层实现查询、分页查询、增加、删除和修改这五个基本的方法UserDAL.cs using System; using System.Data.Entity; using System.Linq; using PMS.IDAL;namespace PMS.DAL {public partial class UserDal {public DbContext DbEntities DbContextFactory.CreateContext();/// summary/// 查询过滤/// /summary/// param namewhereLamada过滤条件Lambda表达式/param/// returns实体集合/returnspublic IQueryableUserDal LoadEntities(System.Linq.Expressions.ExpressionFuncUserDal, bool whereLamada){return DbEntities.SetUserDal().Where(whereLamada);}/// summary/// 分页查询/// /summary/// typeparam nameTS排序类型/typeparam/// param namepageIndex查询的页码/param/// param namepageSize每页显示的数目/param/// param nametotalCount符合条件的总行数/param/// param namewhereLambda过滤条件Lambda表达式/param/// param nameorderbyLambda排序Lambda表达式/param/// param nameisAsc排序方向/param/// returns实体集合/returnspublic IQueryableUserDal LoadPageEntitiesTS(int pageIndex, int pageSize, out int totalCount, System.Linq.Expressions.ExpressionFuncUserDal, bool whereLambda, System.Linq.Expressions.ExpressionFuncUserDal, TS orderbyLambda, bool isAsc){var temp DbEntities.SetUserDal().Where(whereLambda);totalCount temp.Count();temp isAsc ? temp.OrderBy(orderbyLambda).Skip((pageIndex - 1) * pageSize).Take(pageSize) : temp.OrderByDescending(orderbyLambda).Skip((pageIndex - 1) * pageSize).Take(pageSize);return temp;}/// summary/// 删除数据/// /summary/// param nameentity待删数据/param/// returns删除结果/returnspublic bool DeleteEntity(UserDal entity){DbEntities.Entry(entity).State EntityState.Deleted;return true;}/// summary/// 编辑数据/// /summary/// param nameentity待编辑数据/param/// returns编辑结果/returnspublic bool EditEntity(UserDal entity){DbEntities.Entry(entity).State EntityState.Modified;return true;}/// summary/// 添加数据/// /summary/// param nameentity待添加数据/param/// returns已添加数据/returnspublic UserDal AddEntity(UserDal entity){entity DbEntities.SetUserDal().Add(entity);return entity;} } } 注这里的增删改操作并不即时进行而是在封装在数据会话层中以实现工作单元模式提高数据库的操作效率。       考虑到每个类都需要实现相同的数据操作我们可以将以上方法封装到一个泛型基类中各类型只需要继承泛型基类就可以实现以上方法BaseDal.cs using System; using System.Data.Entity; using System.Linq;namespace PMS.DAL {public class BaseDalT where T:class ,new(){public DbContext DbEntities DbContextFactory.CreateContext();/// summary/// 查询过滤/// /summary/// param namewhereLamada过滤条件Lambda表达式/param/// returns实体集合/returnspublic IQueryableT LoadEntities(System.Linq.Expressions.ExpressionFuncT, bool whereLamada){return DbEntities.SetT().Where(whereLamada);}/// summary/// 分页查询/// /summary/// typeparam nameTS排序类型/typeparam/// param namepageIndex查询的页码/param/// param namepageSize每页显示的数目/param/// param nametotalCount符合条件的总行数/param/// param namewhereLambda过滤条件Lambda表达式/param/// param nameorderbyLambda排序Lambda表达式/param/// param nameisAsc排序方向/param/// returns实体集合/returnspublic IQueryableT LoadPageEntitiesTS(int pageIndex, int pageSize, out int totalCount, System.Linq.Expressions.ExpressionFuncT, bool whereLambda, System.Linq.Expressions.ExpressionFuncT, TS orderbyLambda, bool isAsc){var temp DbEntities.SetT().Where(whereLambda);totalCount temp.Count();temp isAsc ? temp.OrderBy(orderbyLambda).Skip((pageIndex - 1) * pageSize).Take(pageSize) : temp.OrderByDescending(orderbyLambda).Skip((pageIndex - 1) * pageSize).Take(pageSize);return temp;}/// summary/// 删除数据/// /summary/// param nameentity待删数据/param/// returns删除结果/returnspublic bool DeleteEntity(T entity){DbEntities.Entry(entity).State EntityState.Deleted;return true;}/// summary/// 编辑数据/// /summary/// param nameentity待编辑数据/param/// returns编辑结果/returnspublic bool EditEntity(T entity){DbEntities.Entry(entity).State EntityState.Modified;return true;}/// summary/// 添加数据/// /summary/// param nameentity待添加数据/param/// returns已添加数据/returnspublic T AddEntity(T entity){entity DbEntities.SetT().Add(entity);//DbEntities.SaveChanges();return entity;}} } UserDal继承BaseDal using PMS.IDAL; using PMS.Model;namespace PMS.DAL {public partial class UserDal : BaseDalUser{} } 数据访问接口层的构建       然后我们建立相应的IbaseDal接口和IUserDal接口并且使UserDal类实现IUserDal接口 IBaseDal using System; using System.Linq;namespace PMS.IDAL {public interface IBaseDalT where T:class,new(){IQueryableT LoadEntities(System.Linq.Expressions.ExpressionFuncT, bool whereLamada);IQueryableT LoadPageEntitiess(int pageIndex, int pageSize, out int totalCount,System.Linq.Expressions.ExpressionFuncT, bool whereLambda,System.Linq.Expressions.ExpressionFuncT, s orderbyLambda, bool isAsc);bool DeleteEntity(T entity);bool EditEntity(T entity);T AddEntity(T entity);} } IUserDal using PMS.Model;namespace PMS.IDAL {public partial interface IUserDal:IBaseDalUser{} } UserDal实现IUserDal接口 public partial class UserDal : BaseDalUser,IUserDal 数据会话层的构建 抽象工厂类AbstractFactory using System.Configuration; using System.Reflection; using PMS.IDAL;namespace PMS.DALFactory {public partial class AbstractFactory{//读取保存在配置文件中的程序集名称与命名空间名private static readonly string AssemblyPath ConfigurationManager.AppSettings[AssemblyPath];private static readonly string NameSpace ConfigurationManager.AppSettings[NameSpace];/// summary/// 获取UserDal的实例/// /summary/// returns/returnspublic static IUserDal CreateUserInfoDal(){var fullClassName NameSpace .UserInfoDal;return CreateInstance(fullClassName) as IUserDal;}/// summary/// 通过反射获得程序集中某类型的实例/// /summary/// param nameclassName/param/// returns/returnsprivate static object CreateInstance(string className){var assembly Assembly.Load(AssemblyPath);return assembly.CreateInstance(className);}} } 数据会话类DbSession using System.Data.Entity; using PMS.IDAL; using PMS.DAL;namespace PMS.DALFactory {public partial class DbSession:IDbSession{public DbContext Db{get { return DbContextFactory.CreateContext(); }}private IUserDal _userDal;public IUserDal UserDal{get { return _userDal ?? (_userDal AbstractFactory.CreateUserInfoDal()); }set { _userDal value; }}/// summary/// 工作单元模式统一保存数据/// /summary/// returns/returnspublic bool SaveChanges(){return Db.SaveChanges() 0;}} }       业务逻辑层的构建 业务类基类BaseService using System; using System.Linq; using System.Linq.Expressions; using PMS.DALFactory; using PMS.IDAL;namespace PMS.BLL {public abstract class BaseServiceT where T:class,new(){public IDbSession CurrentDbSession{get{return new DbSession();}}public IBaseDalT CurrentDal { get; set; }public abstract void SetCurrentDal();public BaseService(){SetCurrentDal();//子类一定要实现抽象方法以指明当前类的子类类型。}/// summary/// 查询过滤/// /summary/// param namewhereLambda/param/// returns/returnspublic IQueryableT LoadEntities(ExpressionFuncT, bool whereLambda){return CurrentDal.LoadEntities(whereLambda);}/// summary/// 分页/// /summary/// typeparam names/typeparam/// param namepageIndex/param/// param namepageSize/param/// param nametotalCount/param/// param namewhereLambda/param/// param nameorderbyLambda/param/// param nameisAsc/param/// returns/returnspublic IQueryableT LoadPageEntitiess(int pageIndex, int pageSize, out int totalCount, ExpressionFuncT, bool whereLambda,ExpressionFuncT, s orderbyLambda, bool isAsc){return CurrentDal.LoadPageEntitiess(pageIndex, pageSize, out totalCount, whereLambda, orderbyLambda, isAsc);}/// summary/// 删除/// /summary/// param nameentity/param/// returns/returnspublic bool DeleteEntity(T entity){CurrentDal.DeleteEntity(entity);return CurrentDbSession.SaveChanges();}/// summary/// 编辑/// /summary/// param nameentity/param/// returns/returnspublic bool EditEntity(T entity){CurrentDal.EditEntity(entity);return CurrentDbSession.SaveChanges();}/// summary/// 添加数据/// /summary/// param nameentity/param/// returns/returnspublic T AddEntity(T entity){CurrentDal.AddEntity(entity);CurrentDbSession.SaveChanges();return entity;}} }   UserService类 using PMS.IBLL; using PMS.Model;namespace PMS.BLL {public partial class UserService : BaseServiceUser{public override void SetCurrentDal(){CurrentDal CurrentDbSession.UserDal;}} }       业务逻辑接口层的构建       直接建立对应的接口并使用UserService类实现IUserService接口 IBaseService接口 using System; using System.Linq; using System.Linq.Expressions; using PMS.IDAL;namespace PMS.IBLL {public interface IBaseServiceT where T : class,new(){IDbSession CurrentDbSession { get; }IBaseDalT CurrentDal { get; set; }void SetCurrentDal();IQueryableT LoadEntities(ExpressionFuncT, bool whereLambda);IQueryableT LoadPageEntitiess(int pageIndex, int pageSize, out int totalCount,ExpressionFuncT, bool whereLambda,ExpressionFuncT, s orderbyLambda, bool isAsc);bool DeleteEntity(T entity);bool EditEntity(T entity);T AddEntity(T entity);} } IUserService接口: using PMS.Model;namespace PMS.IBLL {public partial interface IUserService:IBaseServiceUser{} } 使用UserService类实现IUserService接口: public partial class UserService : BaseServiceUser, IUserService     以上我们就完成了整个框架中关于User类的各层次的实现。转载于:https://www.cnblogs.com/WayneShao/p/5876880.html
http://www.pierceye.com/news/326001/

相关文章:

  • 苏州网站建设数据网络淘宝网店怎么运营起来
  • 网站建设项目实战实训报告凡科建网站
  • 网站建设程序编制做网站优化的教程
  • 已有网站 需要整改 怎么做信息网官网
  • 中石建基础设施建设有限公司网站南阳网站建设的公司
  • 广东建设银行网站营销渠道策略
  • 廊坊开发区规划建设局网站网站域名续费一年多少钱
  • 网站建设需要哪些准备国外网站顶部菜单设计
  • 免费域名注册和免费建站深圳品牌沙发
  • php网站开发就业网站开发研究综述
  • 华升建设集团有限公司网站网站如何做那种诱导广告
  • 做资讯网站要什么手续科技设计公司网站模板下载
  • 西安互联网网站建设湘潭网站建设设计
  • 微网站开发方案模板前程无忧招聘网下载app官网
  • 网站推广方式大全如何写软文赚钱
  • 同城同镇网站建设做幼儿网站的目标
  • 上饶网站建设兼职辽宁沈阳做网站
  • 阳江企业网站好的外包公司
  • 深圳做分销商城网站我有域名跟空间能教我做网站吗
  • 网站子目录做推送用什么网站
  • 网站手机优化网站上传空间的ip地址
  • 做网站增加流量自助微信网站设计
  • 网站推广的6个方法是什么软件开发合同模板范本1
  • 营销网站手机站wordpress的主题目录
  • 达州建设企业网站重视网站商务通
  • 淘宝网站怎么做视频58做二手车网站应该怎么推广
  • 自动翻译网站软件cf刷枪网站怎么做的
  • 示范校建设验收网站网站对话窗口怎么做
  • phpcms 移动网站模板怎么做个人网页
  • 南宁手机建站公司新加坡网站后缀