.net通用权限框架B/S (四)--DAL数据层以及数据接口
数据层以及数据接口设计如下图(以g_orga组织机构和g_role角色)为例,这几个类可以通过.tt模版生成
设计参考学习http://www.cnblogs.com/hanyinglong/archive/2013/04/08/3008896.html

1.IBaseRepository
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.Entity;
using System.Linq.Expressions; namespace MISMODEL.DAL
{
public interface IBaseRepository<T> where T : class, new()
{
void SetLazyLoading(bool flag); // 1实现对数据库的添加功能,添加实现EF框架的引用
bool AddEntity(T entity);
bool AddEntity(T entity,bool isSave);
// 2实现对数据库的修改功能
bool UpdateEntity(T entity);
// 3实现对数据库的删除功能
bool DeleteEntity(T entity);
bool DeleteEntity(List<T> entity, bool isSave);
// 4实现对数据库的查询 --主键查询
T FindByID(Expression<Func<T, bool>> whereLambda);
// 5实现对数据库的查询 --条件查询
IQueryable<T> LoadEntities(Expression<Func<T, bool>> whereLambda);
// 6实现对数据库的查询 --无条件查询
IQueryable<T> LoadEntities();
// 7查询返回dbset
DbSet<T> LoadDbSetEntities();
// 8实现对数据库的查询 --首行查询
T FirstOrDefaultEntities(Expression<Func<T, bool>> whereLambda);
// 9实现对数据库的查询 --动态条件查询
IQueryable<T> SqlQuery(string sqlstring, params object[] paramertes);
// 10实现对数据的分页查询
IQueryable<T> LoadPageEntities<S>(int pageIndex, int pageSize, out int total, Expression<Func<T, bool>> whereLambda, bool isAsc, Func<T, S> orderByLambda);
//10事物提交
bool Commit();
}
}
2. BaseRepository<T>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.Entity;
using System.Data.Entity.Infrastructure;
using System.Data;
using System.Linq.Expressions; namespace MISMODEL.DAL
{
public class BaseRepository<T> : IBaseRepository<T> where T : class ,new()
{
public MISDBEntities db = ContextFactory.GetCurrentContext();
public void SetLazyLoading(bool flag)
{
db.Configuration.LazyLoadingEnabled = flag;
}
//1实现对数据库的增加功能
public bool AddEntity(T entity)
{
db.Set<T>().Add(entity);
return db.SaveChanges() > ;
}
public bool AddEntity(T entity,bool isSave)
{
db.Set<T>().Add(entity);
if (isSave)
{
return db.SaveChanges() > ;
}
else {
return false;
}
// return isSave ? db.SaveChanges() > 0: false;
}
//2实现对数据库的编辑功能
public bool UpdateEntity(T entity)
{
db.Set<T>().Attach(entity);
db.Entry<T>(entity).State = EntityState.Modified; return db.SaveChanges() > ;
}
//3实现对数据库的删除功能
public bool DeleteEntity(T entity)
{
db.Set<T>().Attach(entity);
db.Entry<T>(entity).State = EntityState.Deleted;
return db.SaveChanges() > ;
}
public bool DeleteEntity(List<T> entitys, bool isSave)
{
foreach (var T in entitys) {
db.Set<T>().Attach(T);
db.Entry<T>(T).State = EntityState.Deleted;
}
if (isSave)
{
return db.SaveChanges() > ;
}
else
{
return false;
}
}
public bool Commit() {
return db.SaveChanges() > ;
}
//4实现对数据库的查询 --主键查询
public T FindByID(Expression<Func<T, bool>> whereLambda)
{
return db.Set<T>().AsNoTracking().FirstOrDefault(whereLambda);
}
//5实现对数据库的查询 --条件查询
public IQueryable<T> LoadEntities(Expression<Func<T, bool>> whereLambda)
{
return db.Set<T>().AsNoTracking().Where<T>(whereLambda);
}
public DbSet<T> LoadDbSetEntities()
{
return db.Set<T>();
}
//6实现对数据库的查询 --无条件查询
public IQueryable<T> LoadEntities()
{
return db.Set<T>().AsNoTracking().AsQueryable();
}
//7实现对数据库的查询 --首行查询
public T FirstOrDefaultEntities(Expression<Func<T, bool>> whereLambda)
{
return db.Set<T>().FirstOrDefault<T>(whereLambda);
}
//8实现对数据库的查询 --动态条件查询
public IQueryable<T> SqlQuery(string sqlstring, params object[] paramertes)
{
return db.Database.SqlQuery<T>(sqlstring, paramertes).AsQueryable();
}
//9实现对数据库的查询 --分页
public IQueryable<T> LoadPageEntities<S>(int pageIndex, int pageSize, out int total, Expression<Func<T, bool>> whereLambda, bool isAsc, Func<T, S> orderByLambda)
{
var temp = db.Set<T>().Where<T>(whereLambda);
total = temp.Count(); //得到总的条数
//排序,获取当前页的数据
if (isAsc)
{
temp = temp.OrderBy<T, S>(orderByLambda)
.Skip<T>(pageSize * (pageIndex - )) //越过多少条
.Take<T>(pageSize).AsQueryable(); //取出多少条
}
else
{
temp = temp.OrderByDescending<T, S>(orderByLambda)
.Skip<T>(pageSize * (pageIndex - )) //越过多少条
.Take<T>(pageSize).AsQueryable(); //取出多少条
}
return temp.AsQueryable();
}
}
}
3.角色和组织机构数据接口
public interface IG_orgaRepository:IBaseRepository<G_orga> //生成接口
{
} public interface IG_roleRepository:IBaseRepository<G_role> //生成接口
{
}
4.角色和组织机构数据层实现
public class G_orgaRepository:BaseRepository<G_orga>,IG_orgaRepository //生成实体对象
{
} public class G_roleRepository:BaseRepository<G_role>,IG_roleRepository //生成实体对象
5.为实现数据线程唯一,新建类ContextFactory
BaseRepository<T>调用该类
public MISDBEntities db = ContextFactory.GetCurrentContext();
public class ContextFactory
{
/// <summary>
/// 获取当前数据上下文
/// </summary>
/// <returns></returns>
public static MISDBEntities GetCurrentContext()
{
MISDBEntities _nContext = CallContext.GetData("MISDB") as MISDBEntities;
if (_nContext == null)
{
_nContext = new MISDBEntities();
CallContext.SetData("MISDB", _nContext);
}
_nContext.Configuration.LazyLoadingEnabled = false;
return _nContext;
}
}
6.为降低系统耦合建立工厂类RepositoryFactory
public static class RepositoryFactory
{ public static IG_orgaRepository G_orgaRepository
{
get { return new G_orgaRepository(); }
}
public static IG_rolemenuRepository G_rolemenuRepository
{
get { return new G_rolemenuRepository(); }
} }
.net通用权限框架B/S (四)--DAL数据层以及数据接口的更多相关文章
- .net通用权限框架B/S(一)
一直做软件实施,用过一些二次开发平台,最近看了一些大神写的框架,于是参考写了一个B/S通用权限框架,项目使用MVC4+EF5+EASYUI(.net framework4),开发环境vs2010+sq ...
- 看过《大湿教我写.net通用权限框架(1)之菜单导航篇》之后发生的事(续)——主界面
引言 在UML系列学习中的小插曲:看过<大湿教我写.net通用权限框架(1)之菜单导航篇>之后发生的事 在上篇中只拿登录界面练练手,不把主界面抠出来,实在难受,严重的强迫症啊.之前一直在总 ...
- .net通用权限框架C/S概览
通用权限框架cs部分 先概述一下,cs使用vs2010+sql2008 和bs公用同一个数据库 为使界面好看使用了第三方控件 donetbar和devexpress,正版是要收费的,但是你们都明白的可 ...
- .net通用权限框架B/S (五)--WEB(3)组织机构
.net通用权限框架B/S 首先我们看导航菜单中,对组织机构的设置 我们设置了组织机构名称,链接(对应的mvc控制器名/orga),图标是个小钥匙,菜单的操作权限设置的是"添加,编辑,删除& ...
- .net通用权限框架B/S (五)--WEB(2)登录
.net通用权限框架 登录成功将 1.登录用户id保存到session 2.保存权限到Dictionary<int,string>,然后将该对象保存到session中,以便后续页面使用 D ...
- .net通用权限框架B/S (五)--WEB(1)首页
通用权限框架--web 首页 1.首页截图 2.首页views 布局分为三部分top,left,main 引入easyui和jquery的js以及相关的css 使用easyui进行布局,分区代码bod ...
- Winfrom devexpress 通用权限框架
毕业到现在也快两年了,手上的项目也有好几个,但总感觉不是狠理想,近来把手上杂七杂八的项目整理了一下,结合各个项目的优点,重新开发了一套winfrom+devexpress 通用权限(CS)框架(BS版 ...
- 基于SSM框架的通用权限框架设计
1. 整体解决方案概述 1.1 权限整体解决方案概述 权限设计主要有一下几大部分组成: PassPort: 针对现在系统的分析,系统之间有部分信息是共享的,这部分信息将由 ...
- ASP.NET通用权限框架 权限管理系统源码jquery 精美UI源码
软件技术开发,合作请联系QQ:858-048-581 开发工具 VS2010 .sql2005.2008等(在Sql server数据执行脚本即可) VS2010 打开保证本地运行成功(数据库.源代 ...
随机推荐
- Xcode7 使用NSURLSession发送HTTP请求报错
http://blog.csdn.net/chenyong05314/article/details/46721205
- mac 上配置sublime text3插件
1.安装MAC 版 sublime text 3 安装插件管理器 打开Sublime,按下Control + `(Mac)或者Ctrl + `(Windows),然后粘贴上下面的代码: import ...
- 【OpenCV新手教程之十一】 形态学图像处理(二):开运算、闭运算、形态学梯度、顶帽、黑帽合辑
本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接:http://blog.csdn.net/poem_qianmo/article/details/23184547 作者:毛星云(浅墨) ...
- Windows 2012 AD配置
//本文选在快帮网,非原创. Active Directory概述: 使用 Active Directory(R) 域服务 (AD DS) 服务器角色,可以创建用于用户和资源管理的可伸缩.安全及可管理 ...
- 表现层技术以及Freemaker使用教程
表现出计数以及Freemaker详解 在java领域,表现层技术主要有三种:jsp.freemarker.velocity.jsp是大家最熟悉的技术优点: 1.功能强大,可以写java代码 2.支持j ...
- global变量
在函数体内定义的global变量,函数体外可以使用,在函数体外定义的global变量不能在函数体内使用, $global $a; $a=123; function f() { echo $a; //错 ...
- C语言静态函数静态变量
C语言程序可以看成由一系列外部对象构成,这些外部对象可能是变量或函数.而内部对象是指定义在函数内部的函数参数及变量. 外部变量定义在函数之外,因此可以在许多函数中使用.由于C语言不允许在一个函数中定义 ...
- mysql 批量更新
bs_user 表,我们叫他 bu表, 字段user_id,len_id, think_wellUser 表,我们简称为tw表,中的user_id ,len_id 其中tw表的user_id 是bu表 ...
- 【原】从一个bug浅谈YUI3组件的资源加载
篇前声明:为了不涉及业务细节,篇内信息统一以某游戏,某功能代替 前不久,某游戏准备内测客户端,开发人员测试过程中发现某功能突然不灵了,之前的测试一切ok,没有发现任何异常,第一反应是,游戏内浏览器都是 ...
- Constructor Prototype Pattern 原型模式(PHP示例)
当一个类大部分都是相同的只有部分是不同的时候,如果需要大量这个类的对象,每次都重复实例化那些相同的部分是开销很大的,而如果clone之前建立对象的那些相同的部分,就可以节约开销. 针对php的一种实现 ...