数据层以及数据接口设计如下图(以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. FTP的主动模式和被动模式

    摘自http://blog.csdn.net/love_gaohz/article/details/50723164 http://my.oschina.net/binny/blog/17469 FT ...

  2. Median of Two Sorted 求两个有序数组的中位数

    中位数是把一个数的集合划分为两部分,每部分包含的数字个数相同,并且一个集合中的元素均大于另一个集合中的元素. 因此,我们考虑在一个任意的位置,将数组A划分成两部分.i表示划分数组A的位置,如果数组A包 ...

  3. asp.net中,我们使用ashx获取数据列表,在前端使用$.ajax()解析

    一直在想在asp.net中怎么才能向在java中那样用struts那样做页面请求. 当然asp.net mvc就是类似struts的东西吧,不过还没来得及学习. 今天就用ashx来接收页面请求,并调用 ...

  4. 关于xxx.h file not found 的问题

    在引用第三方库的时候,经常会遇到xxx.h file not found的问题. 首先,我们要知道在引用第三方的时候,我们使用的第三方的库的类型. .a静态库 使用方式:#import "x ...

  5. Oracle存储过程的一点使用总结

    [博客文章背景]博客开通已经1.2年了,一直碍于技术能力,不敢献丑.想起1年前在一个数据处理相关项目结束后,代金排主管让我做一个数据库开发总结文档和一个Toad.PL/SQL Developer工具的 ...

  6. Debug编辑通过转Release找不到命名空间

    首先查看缺少命名空间在哪个项目中 然后看缺少命名空间项目中bin/Release有没有相关文件 如果没有对该项目进行Release编译然后在编译所有项目

  7. hibernate初体验

    简介: Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库. Hibernate可以应用在任何使 ...

  8. 【IOS学习基础】OC类的相关

    几天前突然在别人的类的.m文件中看到这么一句代码:@synthesize xxxx = _xxxx; 当时愣是没理解啥意思,过后才缓过神来发现原来是把一些类的基础知识忘记了,虽然不用过多去深究以前的一 ...

  9. [Effective C++系列]-透彻了解inlining的里里外外

    Understand the ins and outs of inlining.   [原理] Inline函数背后的做法是将“对函数的每一个调用”都用函数本体(function body)替换之.其 ...

  10. 关于ASP.Net的一些概念 转载

    ①理解 .NET Platform Standard 作者:田园里的蟋蟀 http://www.cnblogs.com/xishuai/archive/2016/05/24/understand-do ...