数据层以及数据接口设计如下图(以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数据层以及数据接口的更多相关文章

  1. .net通用权限框架B/S(一)

    一直做软件实施,用过一些二次开发平台,最近看了一些大神写的框架,于是参考写了一个B/S通用权限框架,项目使用MVC4+EF5+EASYUI(.net framework4),开发环境vs2010+sq ...

  2. 看过《大湿教我写.net通用权限框架(1)之菜单导航篇》之后发生的事(续)——主界面

    引言 在UML系列学习中的小插曲:看过<大湿教我写.net通用权限框架(1)之菜单导航篇>之后发生的事 在上篇中只拿登录界面练练手,不把主界面抠出来,实在难受,严重的强迫症啊.之前一直在总 ...

  3. .net通用权限框架C/S概览

    通用权限框架cs部分 先概述一下,cs使用vs2010+sql2008 和bs公用同一个数据库 为使界面好看使用了第三方控件 donetbar和devexpress,正版是要收费的,但是你们都明白的可 ...

  4. .net通用权限框架B/S (五)--WEB(3)组织机构

    .net通用权限框架B/S 首先我们看导航菜单中,对组织机构的设置 我们设置了组织机构名称,链接(对应的mvc控制器名/orga),图标是个小钥匙,菜单的操作权限设置的是"添加,编辑,删除& ...

  5. .net通用权限框架B/S (五)--WEB(2)登录

    .net通用权限框架 登录成功将 1.登录用户id保存到session 2.保存权限到Dictionary<int,string>,然后将该对象保存到session中,以便后续页面使用 D ...

  6. .net通用权限框架B/S (五)--WEB(1)首页

    通用权限框架--web 首页 1.首页截图 2.首页views 布局分为三部分top,left,main 引入easyui和jquery的js以及相关的css 使用easyui进行布局,分区代码bod ...

  7. Winfrom devexpress 通用权限框架

    毕业到现在也快两年了,手上的项目也有好几个,但总感觉不是狠理想,近来把手上杂七杂八的项目整理了一下,结合各个项目的优点,重新开发了一套winfrom+devexpress 通用权限(CS)框架(BS版 ...

  8. 基于SSM框架的通用权限框架设计

     1. 整体解决方案概述    1.1 权限整体解决方案概述     权限设计主要有一下几大部分组成:     PassPort:    针对现在系统的分析,系统之间有部分信息是共享的,这部分信息将由 ...

  9. ASP.NET通用权限框架 权限管理系统源码jquery 精美UI源码

    软件技术开发,合作请联系QQ:858-048-581 开发工具 VS2010 .sql2005.2008等(在Sql server数据执行脚本即可)  VS2010 打开保证本地运行成功(数据库.源代 ...

随机推荐

  1. Xcode7 使用NSURLSession发送HTTP请求报错

    http://blog.csdn.net/chenyong05314/article/details/46721205

  2. mac 上配置sublime text3插件

    1.安装MAC 版 sublime text 3 安装插件管理器 打开Sublime,按下Control + `(Mac)或者Ctrl + `(Windows),然后粘贴上下面的代码: import ...

  3. 【OpenCV新手教程之十一】 形态学图像处理(二):开运算、闭运算、形态学梯度、顶帽、黑帽合辑

    本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接:http://blog.csdn.net/poem_qianmo/article/details/23184547 作者:毛星云(浅墨) ...

  4. Windows 2012 AD配置

    //本文选在快帮网,非原创. Active Directory概述: 使用 Active Directory(R) 域服务 (AD DS) 服务器角色,可以创建用于用户和资源管理的可伸缩.安全及可管理 ...

  5. 表现层技术以及Freemaker使用教程

    表现出计数以及Freemaker详解 在java领域,表现层技术主要有三种:jsp.freemarker.velocity.jsp是大家最熟悉的技术优点: 1.功能强大,可以写java代码 2.支持j ...

  6. global变量

    在函数体内定义的global变量,函数体外可以使用,在函数体外定义的global变量不能在函数体内使用, $global $a; $a=123; function f() { echo $a; //错 ...

  7. C语言静态函数静态变量

    C语言程序可以看成由一系列外部对象构成,这些外部对象可能是变量或函数.而内部对象是指定义在函数内部的函数参数及变量. 外部变量定义在函数之外,因此可以在许多函数中使用.由于C语言不允许在一个函数中定义 ...

  8. mysql 批量更新

    bs_user 表,我们叫他 bu表, 字段user_id,len_id, think_wellUser 表,我们简称为tw表,中的user_id ,len_id 其中tw表的user_id 是bu表 ...

  9. 【原】从一个bug浅谈YUI3组件的资源加载

    篇前声明:为了不涉及业务细节,篇内信息统一以某游戏,某功能代替 前不久,某游戏准备内测客户端,开发人员测试过程中发现某功能突然不灵了,之前的测试一切ok,没有发现任何异常,第一反应是,游戏内浏览器都是 ...

  10. Constructor Prototype Pattern 原型模式(PHP示例)

    当一个类大部分都是相同的只有部分是不同的时候,如果需要大量这个类的对象,每次都重复实例化那些相同的部分是开销很大的,而如果clone之前建立对象的那些相同的部分,就可以节约开销. 针对php的一种实现 ...