搭建基本框架

创建基接口:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace CZBK.HeiMaOA.IDAL
{
public interface IBaseDal<T> where T : class,new()
{
IQueryable<T> LoadEntities(System.Linq.Expressions.Expression<Func<T, bool>> whereLambda);
IQueryable<T> LoadPageEntities<s>(int pageIndex, int pageSize, out int totalCount, System.Linq.Expressions.Expression<Func<T, bool>> whereLambda, System.Linq.Expressions.Expression<Func<T, s>> orderbyLambda, bool isAsc);
bool DeleteEntity(T entity);
bool UpdateEntity(T entity);
T AddEntity(T entity);
}
}

其他接口层继承基接口:

using CZBK.HeiMaOA.Model;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace CZBK.HeiMaOA.IDAL
{
/// <summary>
/// 由于每一个接口中,都需要定义CURD,那么造成重复了。所以我们这里可以封装一下。
/// </summary>
public partial interface IUserInfoDal : IBaseDal<UserInfo>
{
//定义自己特有的数据操作的方法。
} }

创建dal层相应类,引用idal model  继承实现iuserinfodal(鼠标放在你iuserinfodal上右键会自动创建实现代码)

拿到EF上下文(demx下的cs文件中)

dal中快速引用EF方法:  在dal新建一个空的数据模型,然后干掉,该引的就都引了

创建basedal(把刚才实现userinfo的代码转移到basedal)

using CZBK.HeiMaOA.Model;
using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace CZBK.HeiMaOA.DAL
{
public class BaseDal<T>where T:class,new()
{
// OAEntities Db = new OAEntities();
DbContext Db = DBContextFactory.CreateDbContext();//完成EF上下文创建.
/// <summary>
/// 基本查询方法
/// </summary>
/// <param name="whereLambda"></param>
/// <returns></returns>
public IQueryable<T> LoadEntities(System.Linq.Expressions.Expression<Func<T, bool>> whereLambda)
{
return Db.Set<T>().Where<T>(whereLambda);
}
/// <summary>
/// 分页方法
/// </summary>
/// <typeparam name="s">排序的约束</typeparam>
/// <param name="pageIndex">当前页码</param>
/// <param name="pageSize">每页显示记录数</param>
/// <param name="totalCount">总条数</param>
/// <param name="whereLambda">过滤条件</param>
/// <param name="orderbyLambda">排序条件</param>
/// <param name="isAsc">排序方式</param>
/// <returns></returns>
public IQueryable<T> LoadPageEntities<s>(int pageIndex, int pageSize, out int totalCount, System.Linq.Expressions.Expression<Func<T, bool>> whereLambda, System.Linq.Expressions.Expression<Func<T, s>> orderbyLambda, bool isAsc)
{
var temp = Db.Set<T>().Where<T>(whereLambda);
totalCount = temp.Count();
if (isAsc)//如果成立表示升序
{
temp = temp.OrderBy<T, s>(orderbyLambda).Skip<T>((pageIndex - ) * pageSize).Take<T>(pageSize);
}
else
{
temp = temp.OrderByDescending<T, s>(orderbyLambda).Skip<T>((pageIndex - ) * pageSize).Take<T>(pageSize);
}
return temp; }
/// <summary>
/// 删除数据
/// </summary>
/// <param name="entity"></param>
/// <returns></returns>
public bool DeleteEntity(T entity)
{
Db.Entry<T>(entity).State = System.Data.EntityState.Deleted;
// return Db.SaveChanges() > 0;
return true;
}
/// <summary>
/// 更新
/// </summary>
/// <param name="entity"></param>
/// <returns></returns>
public bool UpdateEntity(T entity)
{
Db.Entry<T>(entity).State = System.Data.EntityState.Modified;
// return Db.SaveChanges() > 0;
return true;
}
/// <summary>
/// 添加数据
/// </summary>
/// <param name="entity"></param>
/// <returns></returns>
public T AddEntity(T entity)
{
Db.Set <T>().Add(entity);
//Db.SaveChanges();
return entity;
}
}
}

userinfodal 几层basedal 、Iuserinfodal  此处不用实现,basedal已经实现

using CZBK.HeiMaOA.IDAL;
using CZBK.HeiMaOA.Model;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace CZBK.HeiMaOA.DAL
{
public partial class UserInfoDal:BaseDal<UserInfo>,IUserInfoDal
{ } }

在工厂层 添加DBSession  数据会话层,其实就是一个工厂类

添加引用 dal  idal  model

using CZBK.HeiMaOA.DAL;
using CZBK.HeiMaOA.IDAL;
using CZBK.HeiMaOA.Model;
using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace CZBK.HeiMaOA.DALFactory
{
/// <summary>
/// DBSession:数据会话层,赋责数据操作类实例的创建。然后业务层调用数据会话层,获取相应的数据操作类实例。所以说,DBSession(数据会话层)其实就是一个工厂类,完成了业务层与数据层的解耦.
/// </summary>
public partial class DBSession:IDBSession
{
//DbContext Db = new OAEntities();
public DbContext Db {
get { return DBContextFactory.CreateDbContext(); }//完成EF上下文创建
}
//private IUserInfoDal _UserInfoDal;
//public IUserInfoDal UserInfoDal
//{
// get {
// if (_UserInfoDal == null)
// {
// //_UserInfoDal = new UserInfoDal();//这里不能直接new,因为DBSession与数据层耦合.
// _UserInfoDal = DALAbstractFactory.CreateUserInfoDal();//通过抽象工厂将数据会话层与数据层解耦.
// }
// return _UserInfoDal;
// }
// set
// {
// _UserInfoDal = value;
// }
//} /// <summary>
/// 保存数据。一个业务中有可能涉及到对多张表的操作,那么我们希望是将要操作的数据先追加到EF上下文件中,然后再统一的保存到数据库中。这样,就完成了链接一次数据库,完成了多次操作。提高数据操作的性能。
/// </summary>
/// <returns></returns>
public bool SaveChanges()
{
return Db.SaveChanges() > ;
}
/// <summary>
/// 执行SQL语句。insert ,delete update
/// </summary>
/// <param name="sql"></param>
/// <param name="pars"></param>
/// <returns></returns>
public int ExecuteSql(string sql, params System.Data.SqlClient.SqlParameter[] pars)
{
return Db.Database.ExecuteSqlCommand(sql, pars);
}
public List<T> ExecuteQuery<T>(string sql, params System.Data.SqlClient.SqlParameter[] pars)
{
return Db.Database.SqlQuery<T>(sql, pars).ToList();
}
}
}

dalfactory层创建抽象工厂

using System.Configuration;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks; namespace CZBK.HeiMaOA.DALFactory
{
/// <summary>
/// 抽象工厂:都是解决对象的创建问题。(抽象工厂是通过反射的方式创建类的实例.)
/// </summary>
public partial class DALAbstractFactory
{
//private static readonly string DalNameSpace = ConfigurationManager.AppSettings["DalNameSpace"];//获取命名空间.
// private static readonly string DalAssembly = ConfigurationManager.AppSettings["DalAssembly"];
//public static IUserInfoDal CreateUserInfoDal()
//{
// string fullClassName = DalNameSpace + ".UserInfoDal";//构建类的全名称.
// return CreateInstance(fullClassName,DalAssembly) as IUserInfoDal;
//} private static object CreateInstance(string fullClassName,string assemblyPath)
{
var assembly=Assembly.Load(assemblyPath);//加载程序集.
return assembly.CreateInstance(fullClassName);
}
}
}

MVC+EF OA观看视频记录的更多相关文章

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

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

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

    原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列之开篇 前言:博客又有一段时间没有更新了,心里感觉这段时间空空的,好像什么都没有学下,所以就想写博客,所以就有了这个系列,这里当然也 ...

  3. 使用MiniProfiler跟踪MVC + EF + Bootstrap 2 权限管理系统的性能消耗

    安装MiniProfiler 在MVC + EF + Bootstrap 2 权限管理系统入门级(附源码)文章中下载了它的源码,调试模式下打开一个页面都要再2.5秒以上,所以使用MiniProfile ...

  4. MVC+EF 理解和实现仓储模式和工作单元模式

    MVC+EF 理解和实现仓储模式和工作单元模式 原文:Understanding Repository and Unit of Work Pattern and Implementing Generi ...

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

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

  6. 多层架构+MVC+EF+AUTOFAC+AUTOMAPPER

    最近使用ligerui搭建了一个简单的教务管理demo,将重要的地方记录,也希望能帮到有这方面需要园友. 一.目录 1.多层架构+MVC+EF+AUTOFAC+AUTOMAPPER: 2.MVC中验证 ...

  7. ASP.NET MVC+EF框架+EasyUI实现权限管理系列(16)-类库架构扩展以及DLL文件生成修改和用户的简单添加

    原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(16)-类库架构扩展以及DLL文件生成修改和用户的简单添加 ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇) ...

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

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

  9. ASP.NET MVC + EF 利用存储过程读取大数据

    ASP.NET MVC + EF 利用存储过程读取大数据,1亿数据测试很OK 看到本文的标题,相信你会忍不住进来看看! 没错,本文要讲的就是这个重量级的东西,这个不仅仅支持单表查询,更能支持连接查询, ...

随机推荐

  1. 移动端 设计与开发经验之ViewPort

    Viewport :字面意思为视图窗口,在移动 web 开发中使用.表示将设备浏览器宽度虚拟成一个特定的值(或计算得出),这样利于移动 web 站点跨设备显示效果基本一致. 基本写法: <met ...

  2. nginx配置文件中的location中文详解

    location 语法:location [=|~|~*|^~] /uri/ { … }默认:否 上下文:server 这个指令随URL不同而接受不同的结构.你可以配置使用常规字符串和正则表达式.如果 ...

  3. Leetcode Spiral Matrix II

    Given an integer n, generate a square matrix filled with elements from 1 to n2 in spiral order. For ...

  4. topcoder SRM 618 DIV2 LongWordsDiv2

    此题给出的条件是: (1)word的每个字母都是大写字母(此条件可以忽略,题目给的输入都是大写字母) (2) 相等字符不能连续,即不能出现AABC的连续相同的情况 (3)word中不存在字母组成xyx ...

  5. Codeforces Round #250 (Div. 2) A. The Child and Homework

    注意题目长度不能考虑前缀,而且如果即存在一个选项的长度的两倍小于其他所有选项的长度,也存在一个选项的长度大于其他选项长度的两倍,则答案不是一个好的选择,只能选择C. #include <iost ...

  6. XCODE shouldAutorotateToInterfaceOrientation 对于不同版本 设备旋转不同方向时 视图的相应旋转方向的实现

    对于版本号不同的设备,旋转时视图的要做出相应的旋转,那么版本不同,代码的实现是如何的,如何对旋转方向做出限制?下面是小编的个人看法! //版本号为3.5 -5.0 -(BOOL)shouldAutor ...

  7. 【POJ】1160 Post Office

    http://poj.org/problem?id=1160 题意:直线上有n个城市,其中有p个城市有邮局,问如何建p个邮局使得每个城市到最近的邮局和最小.(n<=300, p<=30&a ...

  8. Java_关于App class loader的总结

    Java本身是一种设计的非常简单,非常精巧的语言,所以Java背后的原理也很简单,归结起来就是两点: 1.JVM的内存管理 理解了这一点,所有和对象相关的问题统统都能解决 2.JVM Class Lo ...

  9. 除法 Division

    除法 题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=84562#problem/A 题意: 输入正整数n按从小到大的顺序输出所有 ...

  10. JCreator的配置

    1.在Configure(配置)菜单上选择Options(选项),将弹出对话框. 2.在Option对话框中选择左侧JDK Profile,选择右侧JDK version 1.x.x.. ,点击Edi ...