大神勿喷,小神默默学。

会了就是不值一提的东西,不会就是绝对的高大上。

最后上传源码。希望能给读者带来一些新的认识及知识。

还没上过头条。。各位大神,请点支持一下小弟。

陆续更新。更新到你会为止!!

我不是话唠,我只把重点点出来,细枝末节的不懂的可以留言探讨。这个系列的最后,我会再统一的把大家的问题,列在一篇新的Blog。工作需要规划,写博客也是如此。

仓储层:待优化

基接口:约束

子接口:实现基接口。进一步约束子仓储中特殊的方法。

*基仓储:具体实现,子类继承接口的方法。

    这步最难,最重要!

    ①db不能直接点出具体的Model,只能db.CreateObjectSet<T>().AddObject(entity);将实体“附加”到上下文。

    ②where和order方法需要传lamada。各自类型问题。where<T,bool>   order<T,S>的使用。

    ③Select时候IEumarable<T>转换IQueryable<T>需要AsQueryable()方法。

子仓储:只写除了基类和接口的方法之外外特殊的需求方法。比如多表。

以UserInforRespository为例:

IBaseRespository.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.Entity; //添加System.Data.Entity引用
namespace LKBS.CommunicationPlatform.IDAL
{
public interface IBaseRespository<T> where T : class ,new()
{
//接口不需要上下文db
// int rowcount = 0;
//public 对接口方法无效
bool AddEntity(T entity);
bool DeleteEntity(T entity);
bool UpdateEntity(T entity);
T SelectOneEntity(Func<T, bool> wherelamda);
IQueryable<T> SelectAllEntityList(Func<T, bool> wherelamda); IQueryable<T> SelectPageEntityList<S>(Func<T, S> orderLamda, Func<T, bool> whereLamda, int pageIndex, int pageSize, bool isAsc, out int rowcount);
}
}

BaseRespository.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text; using System.Data.Entity;
using LKBS.CommunicationPlatform.Model;
using LKBS.CommunicationPlatform.IDAL;
using System.Data; namespace LKBS.CommunicationPlatform.DAL
{
public class BaseRespository<T> where T : class,new()
{
ModelContainer db = new ModelContainer(); /// <summary>
/// 增加
/// </summary>
/// <param name="entity">增加实体,实体没赋的属性为NULL</param>
/// <returns></returns>
public bool AddEntity(T entity)
{
db.CreateObjectSet<T>().AddObject(entity);
//db.ObjectStateManager.ChangeObjectState(entity, EntityState.Added);
db.SaveChanges();
return true;
}
/// <summary>
/// 删除
/// </summary>
/// <param name="entity">方便附加到上下文一个实体,传入实体,用到只有ID</param>
/// <returns></returns>
public bool DeleteEntity(T entity)
{
//var temp= db.UserInfor.Where(userinfor=>userinfor.ID>=id).FirstOrDefault<UserInfor>();
//db.UserInfor.Attach(userinfor);
//db.ObjectStateManager.ChangeObjectState(userinfor, EntityState.Deleted);
db.CreateObjectSet<T>().AddObject(entity);
db.ObjectStateManager.ChangeObjectState(entity, EntityState.Deleted);
db.SaveChanges();
return true;
}
/// <summary>
/// 改
/// </summary>
/// <param name="entity"></param>
/// <returns></returns>
public bool UpdateEntity(T entity)
{
//db.UserInfor.Attach(userinfor);
//db.ObjectStateManager.ChangeObjectState(userinfor, EntityState.Modified);
db.CreateObjectSet<T>().AddObject(entity);
db.ObjectStateManager.ChangeObjectState(entity, EntityState.Modified);
db.SaveChanges();
return true;
}
/// <summary>
/// 单个实体
/// </summary>
/// <param name="wherelamda"></param>
/// <returns></returns>
public T SelectOneEntity(Func<T, bool> wherelamda)
{
var rowTemp = db.CreateObjectSet<T>().Where<T>(wherelamda).FirstOrDefault<T>();
return rowTemp;
}
/// <summary>
/// 查询 整张表或者多个实体
/// </summary>
/// <returns></returns>
public IQueryable<T> SelectAllEntityList(Func<T, bool> wherelamda)
{
var rowsTemp = db.CreateObjectSet<T>().Where<T>(wherelamda);
return rowsTemp.AsQueryable<T>();
}
int rowcount = ;
//泛型方法 <S>就是约束参数的类型,传什么参数,“自动识别”<S>. 定义需要<S>,调用该方法可以省略 :因为传的参数就已确定<S>的类型
public IQueryable<T> SelectPageEntityList<S>(Func<T, S> orderLamda, Func<T, bool> whereLamda, int pageIndex, int pageSize, bool isAsc, out int rowcount)
{//非页数pageCount,是总行数
//IEnumerable<>
var temp = db.CreateObjectSet<T>().Where<T>(whereLamda);
rowcount = temp.Count<T>();
if (isAsc)
{
//IQueryable
IEnumerable<T> entityPageList =
temp
.OrderBy<T, S>(orderLamda)
.Skip<T>((pageIndex - ) * pageSize).
Take<T>(pageSize);
//pageCount=db.UserInfor.
return entityPageList.AsQueryable();
}
else
{
IEnumerable<T> entityPageList =
//db.UserInfor
//.Where<UserInfor>(whereLamda)//u => u.ID > 0
temp
.OrderByDescending<T, S>(orderLamda)//u => u.ID
.Skip<T>((pageIndex - ) * pageSize).
Take<T>(pageSize);
//pageCount=db.UserInfor.
return entityPageList.AsQueryable();
} }
}
}

IUserInforRespository.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text; using LKBS.CommunicationPlatform.Model; namespace LKBS.CommunicationPlatform.IDAL
{
public interface IUserInforRespository:IBaseRespository<UserInfor>
{
}
}

UserInforRespository.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text; using LKBS.CommunicationPlatform.Model;
using System.Data;
using LKBS.CommunicationPlatform.IDAL; namespace LKBS.CommunicationPlatform.DAL
{
public class UserInforRespository:BaseRespository<UserInfor>,IUserInforRespository
{
}
}

ASP.NET MVC系列 框架搭建(一)之仓储层的搭建的更多相关文章

  1. ASP.NET MVC系列 框架搭建(三)之服务层的搭建

    邯郸学步 吾虽是一不知名的菜鸟,但,吾亦有一个从后台程序员成为一名小小架构师梦想,深知架构师不是想想就成的. 吾已工作过一阵子,吾妄想在真正毕业之后工作一年左右就能拿到那个数ten thousand的 ...

  2. ASP.NET MVC系列 框架搭建(二)之仓储层的优化

    大神勿喷,小神默默学. 会了就是不值一提的东西,不会就是绝对的高大上. 最后上传源码.希望能给读者带来一些新的认识及知识. 还没上过头条..各位大神,请点支持一下小弟. 陆续更新.更新到你会为止!! ...

  3. ASP.NET MVC+EF框架+EasyUI实现权限管理系列(14)-主框架搭建

    原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(14)-主框架搭建    ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇)   (1):框架搭建    (2 ...

  4. ASP.NET MVC+EF框架+EasyUI实现权限管理系列(1)-框架搭建

    原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(1)-框架搭建 ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇) 前言:这篇博客开始我们便一步一步的来实现这 ...

  5. ASP.NET MVC+EF框架+EasyUI实现权限管理系列(24)-权限组的设计和实现(附源码)(终结)

    ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇)   (1):框架搭建    (2):数据库访问层的设计Demo    (3):面向接口编程   (4 ):业务逻辑层的封装    ...

  6. ASP.NET MVC+EF框架+EasyUI实现权限管理系列(23)-设置角色遗留问题和为权限设置角色以及EasyUI Tabs的使用

    ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇)   (1):框架搭建    (2):数据库访问层的设计Demo    (3):面向接口编程   (4 ):业务逻辑层的封装    ...

  7. ASP.NET MVC+EF框架+EasyUI实现权限管理系列(22)-为用户设置角色

    ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇)   (1):框架搭建    (2):数据库访问层的设计Demo    (3):面向接口编程   (4 ):业务逻辑层的封装    ...

  8. ASP.NET MVC+EF框架+EasyUI实现权限管理系列

    http://www.cnblogs.com/hanyinglong/archive/2013/03/22/2976478.html ASP.NET MVC+EF框架+EasyUI实现权限管理系列之开 ...

  9. ASP.NET MVC+EF框架+EasyUI实现权限管理系列(21)-用户角色权限基本的实现说明

    原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(21)-用户角色权限基本的实现说明     ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇)   (1):框 ...

随机推荐

  1. 读书笔记——OpenGL超级宝典

    对于某些函数的理解 glClear和glClearColor glClearColor指定glClear清除特定缓冲区时使用的值. glFlush 让所有已发送的命令尽快的由实际的绘制引擎执行. gl ...

  2. vim自定义配色方案,图文并茂

    1.先上图                                 下面是tcpdump的源码.颜色根据自己的喜好配置,我比较喜欢亮的颜色,看的清楚! 2.下载辅助配置文件           ...

  3. LessonFifth Redis的持久化功能

    #验证redis的快照和AOF功能 1.先验证RDB快照功能,由于AOF优先级高,先关闭,然后测试,截图如下                 2.设置打开AOF 然后进行实验,截图如下:       ...

  4. noip2014提高组day2二题题解-rLq

    (又是昨天的作业……本题写于昨天) (这破题都做这么久,我是不是吃枣药丸……) (好吧这是一道图论题呢) 本题地址:http://www.luogu.org/problem/show?pid=2296 ...

  5. [转载]ExtJs4 笔记(7) Ext.tip.ToolTip 提示

    作者:李盼(Lipan)出处:[Lipan] (http://www.cnblogs.com/lipan/)版权声明:本文的版权归作者与博客园共有.转载时须注明本文的详细链接,否则作者将保留追究其法律 ...

  6. CSS 属性 - position讲解

    postion 属性定义了一个元素在页面布局中的位置以及对周围元素的影响.该属性共有5个值: 1. position: static2. position: inherit3. position: r ...

  7. jquery/js实现验证聚焦,失焦

    jquery实现验证聚焦,失焦方法: 我还是喜欢用jquery来实现,不管页面中多少个输入框需要实现聚焦,失焦,都公有,我常用的方法是: 遍历该页面中的input框,获取输入框中的val值,当该输入框 ...

  8. FreeMarker 一二事 - 静态模板结合spring展示

    freemarker可以脱离web使用 前一篇文章使用了普通的方法 这回说说结合spring pom额外引入这个jar包 <dependency> <groupId>org.s ...

  9. VideoView 播放资源目录raw下的视频

    你把影片copy到res/raw下!檔名小寫加底線,例如:default_video.3gp,在程式碼裡指定uri路徑 String uri = "android.resource://&q ...

  10. Ubuntu 下安装 apt-get install npm 失败的解决方案

    Ubuntu 下安装 apt-get  install npm 失败的解决方案: sudo apt-get remove nodejs npm ## remove existing nodejs an ...