数据层以及数据接口设计如下图(以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. uva 10382 Watering Grass_贪心

    题意:给你个矩形n*m,再给你n个圆的圆心坐标和半径,问最用最少用几个圆把这个矩形覆盖 思路:直接想发现这问题不容易,后来发现可以把圆看做区间(能把矩形面积覆盖),然后这个问题就容易解决了 #incl ...

  2. windows 2003 server 安装 .NET Framework 2.0环境

    下载net2.0安装包,这里提供官方下载地址: http://www.microsoft.com/zh-cn/download/confirmation.aspx?id=1639 然后运行exe文件, ...

  3. VMware Workstation虚拟机使用ISO映像文件

    VMware Workstation虚拟机使用ISO映像文件 VMware Workstation虚拟机使用ISO映像文件

  4. Hadoop CLI MiniCluster

    CLI MiniCluster Use the climonicluster, users can simply start and stop a single-node hadoop cluster ...

  5. Android开发中目前流行控件和知识点总结

    Android开发中目前流行控件和知识点总结   1.SlidingMenu 滑动菜单 应用案例:Facebook . Path 2.0 .人人.网易新闻 下载地址: https://github.c ...

  6. C#获取URL参数值(NameValueCollection)

    在写程序的时候,我们经常需要对页面进行传参数,比如page?id=1234,那么在page这个页面中就直接可以使用string id = Request.QueryString["id&qu ...

  7. ChartControl简单的圆柱案例

    由于工作需要,最近学习了DevExpress控件中的ChartControl,并做了简单尝试,通过程序动态添加数据源到chartControl控件中,绘制了如下的条形图. 条形图的颜色等外观可在cha ...

  8. struts2 s:if 的字符串比较问题

    如果数据库字段的数据类型为string or  char 类型,此时在页面 <s:if test=""></s:if> 中test <s:iterat ...

  9. 解决ul显示不在div中的问题

    css样式 #banner { padding: 0px; } #banner ul { list-style: none; margin: 0px; padding: 0px; text-align ...

  10. php的SQL连接操作的方法

    初学php,于是一开始就在sql(具体点说是mysql)里受挫严重.于是这里记下一些方法. 首先是基本方法.基本方法现在我不用了,所以我就附一下hustoj中的部分吧 基本方法的数据库连接操作: if ...