搭建基本框架

创建基接口:

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. 使用TCMalloc优化OpenResty

    1.安装依赖包 yum -y install wget gcc gcc-c++ -y 2.安装libunwind库可以从http://ftp.twaren.net/Unix/NonGNU//libun ...

  2. Codeforces Round #235 (Div. 2) A. Vanya and Cards

    #include <iostream> using namespace std; int main(){ int n,x; cin >> n >> x; ; ; i ...

  3. ACM: Just a Hook 解题报告 -线段树

    E - Just a Hook Time Limit:2000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u   D ...

  4. 使用ADO.NET访问数据库

    第一种连接数据库的方法:可以使用.ET Framework提供程序的sqlConnection对象,使用无参数的构造函数创建Connection对象,代码如下: string strcon = &qu ...

  5. SpringMVC整合Shiro

    首先是web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app version=&quo ...

  6. MVVMLight Messenging

    Basically there are two possible ways to send a message, first using an overload of the RaisePropert ...

  7. iOS Notification 的使用

    Notification post notification,notification,notification,notification,notification,n otification ,no ...

  8. Linux_几个常用的命令

    一.基本命令 查看当前路径:pwd 切换文件夹:cd 查看当前用户: who/whoami 取文件前3行:head -3 文件 取文件尾3行:tail -3 文件 切换用户: su - [用户名] 查 ...

  9. VC++6.0编译器标记的那些内存值

    栈内存初始值 0xcccccccc 和-858993460.   二者是一样的, 一个是16进制, 另一个是10进制

  10. jquery Jsonp 跨域访问

    $(function () { $.ajax({ url: 'http://ihisuns.vicp.cc:8765/PcClient.aspx', data: { "ModuleName& ...