ASP.NET MVC教程 框架搭建(一)之仓储层的搭建

大神勿喷,小神默默学。

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

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

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

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

仓储层:待优化

基接口:约束

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

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

    这步最难,最重要!

    ①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 = 0;
      //泛型方法 <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 - 1) * 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 - 1) * 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
  {
  }
}
时间: 2024-10-23 18:34:59

ASP.NET MVC教程 框架搭建(一)之仓储层的搭建的相关文章

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

原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(1)-框架搭建 ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇) 前言:这篇博客开始我们便一步一步的来实现这个权限系统的初步设计-框架搭建,首先我要说的是我们需要开发工具Visual Studio 2012或者10也行,其次是我们要有SQL Server数据库,如果是Visual Studio 2010的话,你还要安装MVC4的开发文件,这个是吗?我不记得了,谁可以回答我一下的,我一直用2012,都是集成

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

http://www.cnblogs.com/hanyinglong/archive/2013/03/22/2976478.html ASP.NET MVC+EF框架+EasyUI实现权限管理系列之开篇 前言:博客又有一段时间没有更新了,心里感觉这段时间空空的,好像什么都没有学下,所以就想写博客,所以就有了这个系列,这里当然也要感谢大家了,因这个 项目我已经上传了,得到了很多网友的评价,也有好多人发邮件给我说这个框架容易出现问题,不能访问,这也是支持我写这个系列的动力,我将这个项目写成一个 系列

ASP.NET MVC 教程-MVC简介

ASP.NET 是一个使用 HTML.CSS.JavaScript 和服务器脚本创建网页和网站的开发框架. ASP.NET 支持三种不同的开发模式:Web Pages(Web 页面).MVC(Model View Controller 模型-视图-控制器).Web Forms(Web 窗体). 本教程介绍 MVC. MVC 编程模式 MVC 是三种 ASP.NET 编程模式中的一种. MVC 是一种使用 MVC(Model View Controller 模型-视图-控制器)设计创建 Web 应

全网最全ASP.NET MVC 教程汇总

全网最全ASP.NET MVC 教程汇总 MVC架构已深得人心,微软也不甘落后,推出了Asp.net MVC.小编特意整理博客园乃至整个网络最具价值的MVC技术原创文章,为想要学习ASP.NET MVC技术的学习者提供一个整合学习入口.本文从Why,What,How三个角度整理MVC 的学习资源,让学习者第一时间找到最有价值的文章,获取最彻底的ASp.NET MVC 框架知识,Let’s go! 1. Why :为什么需要ASP.NET MVC 本章主要为大家汇总了为什么学习Asp.net MV

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

4.为什么使用MVC而不是用WebForm呢? (1)为什么使用MVC而不是用WebForm呢?这个是我临时想的,因为我就是想说明一下WebForm和MVC的优缺点,来可以使大家能够更好地理解 MVC和WebForm,而不像某些人说MVC会替代WebForm,我个人认为这个可能性很小,因为各有各的好处,看在哪里使用吧,下面我就简单介绍下 WebForm和MVC的优缺点. (2)WebForm介绍 1)优点 1):支持事件模型,取决于微软提供了丰富的服务器端组建,WebForm可以快速的搭建Web

ASP.NET MVC+EF框架+EasyUI实现权限管理系列(5)-前台JqueryEasyUI前台实现

原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(5)-前台JqueryEasyUI前台实现 ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇)   (1):框架搭建    (2):数据库访问层的设计Demo    (3):面向接口编程   (4 ):业务逻辑层的封装 前言:今天经理买了一个诺基亚的Windows Phone 8系统,特感兴趣,所以在哪里看了很长时间,这篇文章就写的有点迟, 从这个Demo开始到现在我已经写了4篇博客了,终于可以看到页面的东

ASP.NET MVC+EF框架+EasyUI实现权限管理系列(4)-业务逻辑层的封装

原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(4)-业务逻辑层的封装 ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇)   (1):框架搭建    (2):数据库访问层的设计Demo    (3):面向接口编程 前言:前面几篇博客我们基本已经介绍完了搭建整个项目和数据库访问层以及一些业务逻辑层的实现,当然了,我们的数据库访问层这样还是可以在进行封装的,但是我到这里就行了吧,项目也不大,不需要那么麻烦的,那么我们今天开始介绍我们需要介绍的内容,那就是我

ASP.NET MVC+EF框架+EasyUI实现权限管理系列(2)-数据库访问层的设计Demo

原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(2)-数据库访问层的设计Demo ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇) (1)框架搭建 前言:这篇博客我们继续来实现我的权限系列,这个博客一段时间也没有写了,重点是我在想还写不写,最终我决定还是写下去,因为我们是为了学习,当别人提出意见的时候,我们可以参考和采纳,但是我们不一定非要采纳,上几篇博客大家都说用CodeFirst来实现,是啊,现在基本很少有人用我的这种方法来实现了,都是用CodeF

ASP.NET MVC+EF框架+EasyUI实现权限管理系列(6)- EF上下文实例管理

原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(6)- EF上下文实例管理 ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇)   (1):框架搭建    (2):数据库访问层的设计Demo    (3):面向接口编程   (4 ):业务逻辑层的封装  (5):前台Jquery easyUI实现 前言:通过前面的五篇博客我们已经对权限系统的后台架构进行了详细的说明,那么我再前面的博客中也说到了我们的后台架构还会再改的,我准备这段时间我们继续完善我们的后台