赞
踩
DbSession 是数据访问层的入口
拥有所有Dal实例
- public class DbSession
- {
- public IUserInfoDal UserInfoDal
- {
- get { return DalFactory.GetUserInfoDal(); }
- }
-
- public IOrderInfoDal OrderInfoDal
- {
- get { return DalFactory.GetOrderInfoDal(); }
- }
-
-
- public int SaveChanges()
- {
- return DbContextFactory.GetCurrentDbContext().SaveChanges();
- }
- }
BaseDal中
去除所有SaveChanges
- public T Add(T entity)
- {
- Db.Set<T>().Add(entity);
- //Db.SaveChanges();
- return entity;
- }
SaveChanges
提交到数据库工作由数据访问层提到业务逻辑层
数据批量提交,减少数据提交次数,提高性能
在业务逻辑中
- public class UserInfoService
- {
- DbSession dbSession = new DbSession();
-
- public UserInfo Add(UserInfo userInfo)
- {
- dbSession.UserInfoDal.Add(userInfo);
- dbSession.SaveChanges();
- return userInfo;
- }
- }
之前的方式是添加每一个用户都与数据库交互一次,现在这种方式添加10个用户,一次性提交,减少数据库压力
为了降低耦合性,可以定义接口IDbSession
- public interface IDbSession
- {
- IUserInfoDal UserInfoDal { get; }
- IOrderInfoDal OrderInfoDal { get; }
-
- int SaveChanges();
- }
DbSession实现IDbSession接口
public class DbSession: IDbSession
为了共用实例,可以定义工厂模式
- public class DbSessionFactory
- {
- //一个请求共用一个DbSession
- public static IDbSession GetCurrentDbSession()
- {
- IDbSession db = CallContext.GetData("DbSession") as IDbSession;
- if (db == null)
- {
- db = new DbSession();
- CallContext.SetData("DbSession", db);
- }
-
- return db;
- }
- }
然后在业务逻辑层中,直接定义接口,减少耦合性
- public class UserInfoService
- {
- IDbSession dbSession = DbSessionFactory.GetCurrentDbSession();
-
- public UserInfo Add(UserInfo userInfo)
- {
- dbSession.UserInfoDal.Add(userInfo);
- dbSession.SaveChanges();
- return userInfo;
- }
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。