之前改写网上收集的Respoistory 模式感觉很多地方都是不可取的,这里经过这段时间的充电重新改写一版,当然注释已加,还有不懂的,可以留言我。

首先还是拿出IRespoistory的接口层代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Linq.Expressions;
namespace Respository
{
/// <summary>
/// 这里T是泛型,(T:class T是泛型参数。where T : class 是对T的限制,这里的意思是T必须是引用类型,包括任何类、接口、委托或数组类型)
/// </summary>
/// <typeparam name="T"></typeparam>
public interface IRespository<T>where T:class
{
/// <summary>
/// IRespository保存接口
/// </summary>
/// <param name="entity"></param>
/// <returns></returns>
bool SaveEntity(T entity); /// <summary>
/// IRespository修改接口
/// </summary>
/// <param name="entity"></param>
/// <returns></returns>
bool UpdateEntity(T entity); /// <summary>
/// IRespository删除
/// </summary>
/// <param name="entity"></param>
/// <returns></returns>
bool DeleteEntity(T entity); /// <summary>
/// 根据id查询
/// </summary>
/// <param name="Id"></param>
/// <returns></returns>
T GetEntityById(object Id); /// <summary>
/// 带条件查询
/// </summary>
/// <param name="where"></param>
/// <returns></returns>
T Get(Expression<Func<T, bool>> where); /// <summary>
/// 查询所有
/// </summary>
/// <returns></returns>
IEnumerable<T> GetALLEntity(); /// <summary>
/// 这里也可以用IEnumerable类型,带条件查询所有
/// </summary>
/// <param name="where"></param>
/// <returns></returns>
IQueryable<T> GetAllEntityWhere(Expression<Func<T, bool>> where); /// <summary>
/// 分页
/// </summary>
/// <param name="pageIndex"></param>
/// <param name="PageSize"></param>
/// <returns></returns>
IList<T> GetPageEntities(int pageIndex, int PageSize); /// <summary>
/// 分页带查询条件
/// </summary>
/// <param name="pageIndex"></param>
/// <param name="PageSize"></param>
/// <param name="where"></param>
/// <returns></returns>
IList<T> GetPageEntities(int pageIndex, int PageSize, Expression<Func<T, bool>> where); }
} 然后是Respoistory 对应接口的实现 using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.Entity;
using System.Linq.Expressions;
namespace Respository
{
public class Respository<T>:IRespository<T>where T:class
{
//这里首先把DbContext (数据库的上下文给带出来)
public DbContext context;
public Respository(DbContext context)
{
this.context = context;
} /// <summary>
/// Res保存的方法
/// </summary>
/// <param name="entity"></param>
/// <returns></returns>
public bool SaveEntity(T entity)
{
bool RetStatus = false;
context.Set<T>().Add(entity);
if (Save() > )
{
RetStatus = true;
}
return RetStatus; } /// <summary>
/// Res修改的方法
/// </summary>
/// <param name="entity"></param>
/// <returns></returns>
public bool UpdateEntity(T entity)
{
// throw new NotImplementedException();
bool RetStatus = false;
if (context.Entry(entity).State == System.Data.Entity.EntityState.Modified)
{
if (Save()> )
{
RetStatus = true;
}
}
return RetStatus; } /// <summary>
/// Res删除的方法
/// </summary>
/// <param name="entity"></param>
/// <returns></returns>
public bool DeleteEntity(T entity)
{
//throw new NotImplementedException();
bool RetStatus=false;
if (context.Entry(entity).State == System.Data.Entity.EntityState.Deleted)
{
context.Set<T>().Remove(entity);
if (Save() > )
{
RetStatus = true;
}
}
return RetStatus; } /// <summary>
/// 对Set<T>根据id 的查询的操作
/// </summary>
/// <param name="Id"></param>
/// <returns></returns>
public T GetEntityById(object Id)
{
return context.Set<T>().Find(Id);
} /// <summary>
/// 这里对Set<T>是带条件的操作
/// </summary>
/// <param name="where"></param>
/// <returns></returns>
public T Get(Expression<Func<T, bool>> where)
{
return context.Set<T>().Where(where).FirstOrDefault<T>();
} /// <summary>
/// 查询所有的
/// </summary>
/// <returns></returns>
public IEnumerable<T> GetALLEntity()
{
// throw new NotImplementedException(); IEnumerable<T> query = context.Set<T>(); return query;
} /// <summary>
/// 查询所有带条件
/// </summary>
/// <param name="where"></param>
/// <returns></returns>
public IQueryable<T> GetAllEntityWhere(Expression<Func<T, bool>> where)
{
IQueryable<T> query = context.Set<T>().Where(where);
return query; } /// <summary>
/// 分页方法
/// </summary>
/// <param name="pageIndex"></param>
/// <param name="PageSize"></param>
/// <returns></returns>
public IList<T> GetPageEntities(int pageIndex, int PageSize)
{
IList<T> List = context.Set<T>().Skip(pageIndex * PageSize).Take(PageSize).ToList();
return List ; } /// <summary>
/// 分页带查询条件
/// </summary>
/// <param name="pageIndex"></param>
/// <param name="PageSize"></param>
/// <param name="where"></param>
/// <returns></returns>
public IList<T> GetPageEntities(int pageIndex, int PageSize, Expression<Func<T, bool>> where)
{
// throw new NotImplementedException();
IList<T> List = context.Set<T>().Where(where).Skip(pageIndex * PageSize).Take(PageSize).ToList();
return List; } /// <summary>
/// Save 保存确认方法
/// </summary>
public int Save()
{
return context.SaveChanges(); }
}
} 这里我也把实际的调用写出来吧,希望对看到的同学有所帮助 我这里是用edmx 生成的一个简单的用户表的model 实列和Dbcontext //------------------------------------------------------------------------------
// <auto-generated>
// 此代码是根据模板生成的。
//
// 手动更改此文件可能会导致应用程序中发生异常行为。
// 如果重新生成代码,则将覆盖对此文件的手动更改。
// </auto-generated>
//------------------------------------------------------------------------------ namespace SSOModel.Models
{
using System;
using System.Data.Entity;
using System.Data.Entity.Infrastructure; public partial class yiliuyangEntities : DbContext
{
public yiliuyangEntities()
: base("name=Entities")
{
} protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
throw new UnintentionalCodeFirstException();
} public DbSet<yi_userinfo> yi_userinfo { get; set; }
}
} //------------------------------------------------------------------------------
// <auto-generated>
// 此代码是根据模板生成的。
//
// 手动更改此文件可能会导致应用程序中发生异常行为。
// 如果重新生成代码,则将覆盖对此文件的手动更改。
// </auto-generated>
//------------------------------------------------------------------------------ namespace SSOModel.Models
{
using System;
using System.Collections.Generic; public partial class userinfo
{
public int userid { get; set; }
public string username { get; set; }
public string userpwd { get; set; }
public string yusercode { get; set; }
public Nullable<int> usersex { get; set; }
public string userqq { get; set; }
public string usertel { get; set; }
}
} 然后是EF_Userinfo 方法调用层 using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Linq.Expressions;
using Respository;
using SSOModel.Models;
namespace SSOMain.Models
{
public class EF_Userinfo
{
Respository<yi_userinfo> EF_Res = new Respository<userinfo>(new Entities()); //这里我只写了一个简单的读取方法,是get userinfo 的所有信息
public IList<yi_userinfo> GetUserInfo()
{
return EF_Res.GetALLEntity().ToList(); } }
} 最后是HomeController using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using SSOModel;
using Respository;
using SSOMain.Models;
namespace SSOMain.Controllers
{
public class HomeController : Controller
{
//
// GET: /Home/ EF_Userinfo Ef = new EF_Userinfo(); public ActionResult Index()
{
var list = Ef.GetUserInfo(); return View(list.ToList());
} }
} 页面我也贴出来的 index.cshtml @model IEnumerable<SSOModel.Models.userinfo>
@{
ViewBag.Title = "Index";
} <h2>Index</h2>
<table> <tr>
<th>
名字
</th>
<th>
密码
</th>
</tr> @foreach (var item in Model)
{
<tr>
<td>
@item.username </td>
<td>
@item.userpwd
</td> </tr> } </table>
      Respoistory 的目的是使数据操作集中在它的数据持久层里面,代码重用。个人技术有限只能理解到这里,希望对大家有所帮助。

自己改写的asp.net MVC EF Respoistory 仓储模式的更多相关文章

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

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

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

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

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

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

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

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

  5. ASP.NET MVC + EF 利用存储过程读取大数据,1亿数据测试很OK

    看到本文的标题,相信你会忍不住进来看看! 没错,本文要讲的就是这个重量级的东西,这个不仅仅支持单表查询,更能支持连接查询, 加入一个表10W数据,另一个表也是10万数据,当你用linq建立一个连接查询 ...

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

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

  7. ASP.NET MVC+EF框架+EasyUI实现权限管理系列(20)-多条件模糊查询和回收站还原的实现

    原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(20)-多条件模糊查询和回收站还原的实现 ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇)   (1):框架 ...

  8. ASP.NET MVC+EF框架+EasyUI实现权限管理系列(19)-用户信息的修改和浏览

    原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(19)-用户信息的修改和浏览  ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇)   (1):框架搭建    ...

  9. ASP.NET MVC+EF框架+EasyUI实现权限管理系列(18)-过滤器的使用和批量删除数据(伪删除和直接删除)

    原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(18)-过滤器的使用和批量删除数据(伪删除和直接删除) ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇)   ...

随机推荐

  1. Linux的运行级别和chkconfig用法

    Linux的运行级别和chkconfig用法        一.Linux的运行级别 在装MySQL的时候,才知道了Linux的运行级别这么一回事.汗…自己太水了…下面总结一下: 什么是运行级别呢?简 ...

  2. Java NIO类库Selector机制解析(上)

    一.  前言 自从J2SE 1.4版本以来,JDK发布了全新的I/O类库,简称NIO,其不但引入了全新的高效的I/O机制,同时,也引入了多路复用的异步模式.NIO的包中主要包含了这样几种抽象数据类型: ...

  3. UI进阶 动画

    前言:所谓动画,即应用界面上展示的各种过渡效果,不过其实没有动画并不影响我们产品的功能实现 一.动画 1.动画可以达到的效果 传达状态 提高用户对直接操作的感知 帮助用户可视化操作的结果 2.使用动画 ...

  4. Java学习笔记(八):集合类

    Java中对数据的存储会使用到集合类,下面我们来看看Java中常用的集合类. Collection接口 集合的接口,可以简单的理解为可以动态扩充的数组. Collection接口定义了很多相关的方法, ...

  5. TypeScript学习笔记(三):类

    类 在TypeScript中,类似于C#的结构,即一个文件中可以存在多个类,且文件名可以任意取,我们先看一个简单的类的示例. class Person { private name: string; ...

  6. centos6.5下Python IDE开发环境搭建

    自由不是想做什么就做什么,而是想不做什么就不做什么.        ---摘抄于2016/11/30晚 之前学习了一段时间的Python,但所有部署都在windows上.正赶上最近在学习liux,以后 ...

  7. contiki-main.c 一 打印观察 <contiki学习之五>

    说明: 本文依赖于 contiki/platform/native/contiki-main.c 文件. 在项目工程目录下的hello-world.c 文件里面,有许多的宏,但没有最关键的main() ...

  8. 【甘道夫】HBase(0.96以上版本号)过滤器Filter具体解释及实例代码

    说明: 本文參考官方Ref Guide,Developer API和众多博客.并结合实測代码编写.具体总结HBase的Filter功能,并附上每类Filter的对应代码实现. 本文尽量遵从Ref Gu ...

  9. phpStudy 2014的Apache虚拟主机配置

    安装phpStudy直接百度下载,傻瓜式安装很简单,一直点击下一步即可,中途根据个人爱好设置WWW目录,我的设置在D盘根目录里. 打开虚拟主机配置,打开D:\phpStudy\Apache\conf下 ...

  10. c#代码实现GPS数据的有效性校验

    用于校验GPS报文指令的有效性 很简单的代码,留存吧 public static bool Verify(string gpsInfo)         {            if (gpsInf ...