博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ASP.Net MVC OA项目笔记<四>
阅读量:6716 次
发布时间:2019-06-25

本文共 3668 字,大约阅读时间需要 12 分钟。

 

1.1.1 EF线程唯一

         

         在数据层中用到了EF的实例,在数据会话层也用到了,所以在一个请求中只能创建一个EF实例(线程内唯一对象),把它封装成工厂类

1.1.2 为了防止相互引用,循环引用,所以这个工厂类要写在数据层DAL

         DAL新增类 DBContextFactory

///     /// 负责创建EF数据操作上下文实例,必须保证线程内唯一    ///     public class DBContextFactory    {        public static DbContext CreateDbContext()        {            //从CallContext从读取dbContext            DbContext dbContext = (DbContext)CallContext.GetData("dbContext");            //如果CallContext中的dbContext是null的,说明是第一次创建            if (dbContext==null)            {                dbContext = new OAEntities();//创建一个新的EF上下文实例                CallContext.SetData("dbContext", dbContext);//把dbContext存进CallContext中,以备下次使用            }            return dbContext;        }    }

1.2.1 把BaseDal和DBSession中的EF数据操作上下文实例改成 线程唯一的

         两种写法都可以

public class BaseDal
where T : class, new() { //OAEntities Db = new OAEntities(); DbContext Db = DBContextFactory.CreateDbContext(); ///
/// 新增 /// ///
///
public T AddEntity(T entity) { Db.Set
().Add(entity);//DbSet
//Db.SaveChanges(); return entity; } ///
/// 删除 /// ///
///
public bool DeleteEntity(T entity) { //追加到ef上,打上删除标记,再保存 Db.Entry
(entity).State = System.Data.Entity.EntityState.Deleted; //return Db.SaveChanges() > 0; return true; } ///
/// 更新 /// ///
///
public bool EditEntity(T entity) { //追加到ef上,打上编辑标记,再保存 Db.Entry
(entity).State = System.Data.Entity.EntityState.Modified; //return Db.SaveChanges() > 0; return true; } ///
/// 查询过滤 /// ///
///
public IQueryable
LoadEntities(Expression
> whereLambda) { return Db.Set
().Where(whereLambda); } ///
/// 分页 /// ///
///
页码 ///
每页数量 ///
总数 ///
过滤条件 ///
排序条件 ///
///
public IQueryable
PageLoadEntities
(int pageIndex, int pageSize, out int totalCount, Expression
> whereLambda, Expression
> orderbyLambda, bool isAsc) { var temp = Db.Set
().Where(whereLambda); totalCount = temp.Count(); if (isAsc)//正序 { //列:pageIndex=3,pageSize=15 //正序排列后,跳过第3页前的数据(前2页*15),剩下的只读取15条 temp = temp.OrderBy
(orderbyLambda).Skip
((pageIndex - 1) * pageSize).Take
(pageSize); } else//倒序 { temp = temp.OrderByDescending
(orderbyLambda).Skip
((pageIndex - 1) * pageSize).Take
(pageSize); } return temp; } }

 

 

///     /// 1.数据会话层:就是一个工厂类,负责完成所有数据操作类实例的创建,然后业务层通过数据会话层来获取要操作数据类的实例,    /// 所以数据会话层将业务层和数据层解耦。    /// 2.在数据会话层中提供一个方法:完成所有数据的保存。    ///     public class DBSession    {        //OAEntities Db = new OAEntities();         public DbContext Db        {            get            {                return DBContextFactory.CreateDbContext();            }        }        private IUserInfoDal _UserInfoDal;        public IUserInfoDal UserInfoDal        {            get            {                if(_UserInfoDal==null)                {                    _UserInfoDal=new UserInfoDal();                }                return _UserInfoDal;            }            set            {                _UserInfoDal = value;            }        }        ///         /// 一个业务中经常涉及到对多张表的操作,我们希望连接一次数据库,完成对这张表数据的操作,提高性能        /// 工作单元模式        ///         /// 
public bool SaveChanges() { return Db.SaveChanges() > 0; } }

 

转载于:https://www.cnblogs.com/VSMinos/p/9758767.html

你可能感兴趣的文章
Netty NioEventLoop 启动过程源码分析
查看>>
机器学习在客户管理场景中的应用
查看>>
PHP导出数据到表格的实例
查看>>
php 后端实现JWT认证方法
查看>>
[深入理解Redis]读取RDB文件
查看>>
【java并发编程实战6】AQS之独占锁ReentrantLock实现
查看>>
Javascript中进行遍历操作的所有方法
查看>>
JS的原型链和继承
查看>>
python中pyquery无法获取标签名的dom节点
查看>>
面试官:请手写一个webpack4.0配置
查看>>
有关getter 和 setter的使用
查看>>
JavaScript面向对象中的Function类型个人分享
查看>>
记录一次Webpack插件优化的经历
查看>>
【跃迁之路】【505天】程序员高效学习方法论探索系列(实验阶段262-2018.06.25)...
查看>>
ubuntu16.04 搭建java 环境
查看>>
关于 try 和 finally 中的 return
查看>>
JS 1-数据类型
查看>>
(Google I/O '17) Speeding Up Your Android Gradle Builds 在本地的实践
查看>>
最大似然法与似然函数
查看>>
SAPGUI里实现自定义的语法检查
查看>>