1、DAL层

using Night.Models;
using System;
using System.Collections.Generic;
using System.Data.Entity.Infrastructure;
using System.Linq;
using System.Linq.Expressions;
using System.Reflection; namespace NightCat.DAL
{
public class SysLogService
{ //public SysLogService()
//{
// //删除使用
// DelByCondition(p => p.F_Id == "00003"); // //修改使用
// Sys_Log sl = new Sys_Log()
// {
// F_Id = "00003",
// F_Account = "adf",
// F_CreatorTime = DateTime.Now
// };
// this.Modify(sl, "F_Account", "F_CreatorTime");//或
// this.Modify(sl, new string[] { "F_Account", "F_CreatorTime" }); // //排序
// List<Sys_Log> ssl = this.GetListByCondition(p => p.F_Id == "00003" && p.F_Account == "1000");
// List<Sys_Log> ssl2 = this.GetListByCondition(p => p.F_Id == "00003" && p.F_Account == "1000", p2 => p2.F_Id); //} /// <summary>
/// EF数据上下文
/// </summary>
NightCatEntities nc = new NightCatEntities(); #region 新增实体
/// <summary>
/// 新增实体
/// </summary>
/// <param name="log"></param>
/// <returns></returns>
public int Add(Sys_Log log)
{
try
{
nc.Sys_Log.Add(log);
//保存成功之后,会将自增的ID和新增的行数设置给log
return nc.SaveChanges();
}
catch (Exception ex)
{
throw ex;
}
}
#endregion #region 根据ID删除一条数据
/// <summary>
/// 根据ID删除一条数据
/// </summary>
/// <param name="Id"></param>
/// <returns></returns>
public int DelById(string Id)
{
try
{
//创建对象
Sys_Log sl = new Sys_Log()
{
F_Id = Id
};
//把要删除的对象添加到集合中
nc.Sys_Log.Attach(sl);
nc.Sys_Log.Remove(sl);
return nc.SaveChanges();
}
catch (Exception ex)
{
throw ex;
}
}
#endregion #region 根据条件删除数据
/// <summary>
/// 根据条件删除数据
/// </summary>
/// <param name="delWhere">返回值为bool类型的委托对象(方法)</param>
/// <returns></returns>
public int DelByCondition(Expression<Func<Sys_Log, bool>> delWhere)
{
try
{
//查询
List<Sys_Log> pDels = nc.Sys_Log.Where(delWhere).ToList();
pDels.ForEach(p => nc.Sys_Log.Remove(p));
return nc.SaveChanges();
}
catch (Exception ex)
{
throw ex;
}
}
#endregion #region 修改+Modify(Sys_Log p, params string[] proNames)
/// <summary>
/// 修改数据
/// </summary>
/// <param name="p">要修改的对象</param>
/// <param name="proName">要修改的属性名称集合</param>
/// params 可变参数
/// <returns></returns>
public int Modify(Sys_Log p, params string[] proNames)
{
try
{
DbEntityEntry entry = nc.Entry<Sys_Log>(p);
entry.State = System.Data.Entity.EntityState.Unchanged; foreach (string proName in proNames)
{
entry.Property(proName).IsModified = true;
}
return nc.SaveChanges();
}
catch (Exception)
{ throw;
}
}
#endregion #region 根据条件检索集合中的数据 List<Sys_Log> GetListByCondition(Expression<Func<Sys_Log, bool>> whereLambda)
/// <summary>
/// 根据条件检索集合中的数据
/// </summary>
/// <param name="whereLambda"></param>
/// <returns></returns>
public List<Sys_Log> GetListByCondition(Expression<Func<Sys_Log, bool>> whereLambda)
{
try
{
return nc.Sys_Log.Where(whereLambda).ToList();
}
catch (Exception ex)
{
throw ex;
}
}
#endregion #region + 根据条件检索集合中的数据并进行排序+GetListByCondition<Tkey>(Expression<Func<Sys_Log, bool>> whereLambda,Expression<Func<Sys_Log,Tkey>> orderLamba)
/// <summary>
/// 根据条件检索集合中的数据并进行排序+GetListByCondition<Tkey>(Expression<Func<Sys_Log, bool>> whereLambda,Expression<Func<Sys_Log,Tkey>> orderLamba)
/// </summary>
/// <param name="whereLambda"></param>
/// <returns></returns>
/// 这么的Tkey不是必要的使用的时候可以不写
public List<Sys_Log> GetListByCondition<Tkey>(Expression<Func<Sys_Log, bool>> whereLambda,Expression<Func<Sys_Log,Tkey>> orderLamba)
{
try
{
return nc.Sys_Log.Where(whereLambda).OrderBy(orderLamba).ToList();
}
catch (Exception ex)
{
throw ex;
}
}
#endregion #region 根据条件和排序查询一分页的形式展示
/// <summary>
/// 根据条件和排序查询一分页的形式展示
/// </summary>
/// <typeparam name="Tkey">排序字段类型</typeparam>
/// <param name="pageIndex">查询的页面</param>
/// <param name="pageSize">每页显示的条数</param>
/// <param name="orderLambda">排序的字段</param>
/// <param name="whereLambda">查询的条件</param>
/// <returns></returns>
public List<Sys_Log> GetPageList<Tkey>(int pageIndex, int pageSize, Expression<Func<Sys_Log, Tkey>> orderLambda, Expression<Func<Sys_Log, bool>> whereLambda)
{
try
{
return nc.Sys_Log.Where(whereLambda).OrderBy(orderLambda).Skip((pageIndex - ) * pageSize).Take(pageSize).ToList();
}
catch (Exception ex)
{
throw ex;
}
}
#endregion #region 批量修改+Modify(Sys_Log p, params string[] proNames)
/// <summary>
/// 批量修改数据
/// </summary>
/// <param name="model">要修改的列及修改后列的值的集合</param>
/// params 可变参数
/// <returns></returns>
public int Modifys(Sys_Log model,Expression<Func<Sys_Log,bool>> whereLambda,params string[] ModifyProNames)
{
try
{
//1、查询出要修改的数据
List<Sys_Log> listModif = nc.Sys_Log.Where(whereLambda).ToList(); //2、获取实体类对象
Type t = typeof(Sys_Log);
//3、获取实体类所有的共有属性
List<Sys_Log> proInfos = t.GetProperties(BindingFlags.Instance | BindingFlags.Public).ToList();
//4、创建一个实体属性字典集合
Dictionary<string, PropertyInfo> dictPros = new Dictionary<string, PropertyInfo>();
//5、将实体属性中要修改的属性,添加到字典集合中,键:属性名,值:属性对象
proInfos.ForEach(p =>
{
if (ModifyProNames.Contains(p.F_NickName))
{
dictPros.Add(p.F_NickName, p);
}
});
//循环要修改的属性名
foreach (string proName in ModifyProNames)
{
//判断要修改的属性名是否在实体类的属性集合中
if (dictPros.ContainsKey(proName))
{
//如何存在,则取出要修改的属性对象
PropertyInfo proInfo = dictPros[proName];
//取出要修改的值
object newValue = proInfo.GetValue(model, null);
//批量设置要修改的对象的属性
foreach (Sys_Log item in listModif)
{
//为要修改的对象的要修改的属性,设置新的值
proInfo.SetValue(item, newValue,null);
} }
} }
catch (Exception)
{ throw;
}
}
#endregion
}
}

2、BLL层

using Night.Models;
using NightCat.DAL;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using NightCat.DAL; namespace NightCat.BLL
{
public class SysLogManager
{
SysLogService ss = new SysLogService(); #region 新增实体
/// <summary>
/// 新增实体
/// </summary>
/// <param name="log"></param>
/// <returns></returns>
public int Add(Sys_Log log)
{
try
{
return ss.Add(log);
}
catch (Exception ex)
{
throw ex;
}
}
#endregion #region 根据ID删除一条数据
/// <summary>
/// 根据ID删除一条数据
/// </summary>
/// <param name="Id"></param>
/// <returns></returns>
public int DelById(string Id)
{
try
{
return ss.DelById(Id);
}
catch (Exception ex)
{
throw ex;
}
}
#endregion #region 根据条件删除数据
/// <summary>
/// 根据条件删除数据
/// </summary>
/// <param name="delWhere">返回值为bool类型的委托对象(方法)</param>
/// <returns></returns>
public int DelByCondition(Expression<Func<Sys_Log, bool>> delWhere)
{
try
{
//查询
return ss.DelByCondition(delWhere);
}
catch (Exception ex)
{
throw ex;
}
}
#endregion #region 修改+Modify(Sys_Log p, params string[] proNames)
/// <summary>
/// 修改数据
/// </summary>
/// <param name="p">要修改的对象</param>
/// <param name="proName">要修改的属性名称集合</param>
/// params 可变参数
/// <returns></returns>
public int Modify(Sys_Log p, params string[] proNames)
{
try
{
return ss.Modify(p, proNames);
}
catch (Exception)
{ throw;
}
}
#endregion #region 根据条件检索集合中的数据 List<Sys_Log> GetListByCondition(Expression<Func<Sys_Log, bool>> whereLambda)
/// <summary>
/// 根据条件检索集合中的数据
/// </summary>
/// <param name="whereLambda"></param>
/// <returns></returns>
public List<Sys_Log> GetListByCondition(Expression<Func<Sys_Log, bool>> whereLambda)
{
try
{
return ss.GetListByCondition(whereLambda);
}
catch (Exception ex)
{
throw ex;
}
}
#endregion #region + 根据条件检索集合中的数据并进行排序+GetListByCondition<Tkey>(Expression<Func<Sys_Log, bool>> whereLambda,Expression<Func<Sys_Log,Tkey>> orderLamba)
/// <summary>
/// 根据条件检索集合中的数据并进行排序+GetListByCondition<Tkey>(Expression<Func<Sys_Log, bool>> whereLambda,Expression<Func<Sys_Log,Tkey>> orderLamba)
/// </summary>
/// <param name="whereLambda"></param>
/// <returns></returns>
/// 这么的Tkey不是必要的使用的时候可以不写
public List<Sys_Log> GetListByCondition<Tkey>(Expression<Func<Sys_Log, bool>> whereLambda, Expression<Func<Sys_Log, Tkey>> orderLamba)
{
try
{
return ss.GetListByCondition<Tkey>(whereLambda,orderLamba);
}
catch (Exception ex)
{
throw ex;
}
}
#endregion #region 根据条件和排序查询一分页的形式展示
/// <summary>
/// 根据条件和排序查询一分页的形式展示
/// </summary>
/// <typeparam name="Tkey">排序字段类型</typeparam>
/// <param name="pageIndex">查询的页面</param>
/// <param name="pageSize">每页显示的条数</param>
/// <param name="orderLambda">排序的字段</param>
/// <param name="whereLambda">查询的条件</param>
/// <returns></returns>
public List<Sys_Log> GetPageList<Tkey>(int pageIndex, int pageSize, Expression<Func<Sys_Log, Tkey>> orderLambda, Expression<Func<Sys_Log, bool>> whereLambda)
{
try
{
return ss.GetPageList(pageIndex, pageSize, orderLambda, whereLambda);
}
catch (Exception ex)
{
throw ex;
}
}
#endregion
}
}

3、UI层

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="NightCatWeb.WebForm1" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:GridView ID="gvParas" runat="server"> </asp:GridView>
</div>
</form>
</body>
</html>
---------------------------------------------------------------------
using Night.Models;
using NightCat.BLL;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls; namespace NightCatWeb
{
public partial class WebForm1 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!this.IsPostBack)
{
SysLogManager sm = new SysLogManager();
List<Sys_Log> sl = sm.GetPageList(, , p => p.F_Id, p => p.F_IPAddress != "").ToList();
this.gvParas.DataSource = sl;
this.gvParas.DataBind();
}
}
}
}

MVC ---- EF三层代码的更多相关文章

  1. 转载——Asp.Net MVC+EF+三层架构的完整搭建过程

    转载http://www.cnblogs.com/zzqvq/p/5816091.html Asp.Net MVC+EF+三层架构的完整搭建过程 架构图: 使用的数据库: 一张公司的员工信息表,测试数 ...

  2. MVC+EF三层+抽象工厂

    MVC+EF三层+抽象工厂项目搭建   注意:项目经过两次搭建,所以截图中顶级命名空间有ZHH和ZHH2区别,但是架构的内容是一样的,可以将ZHH和ZHH2视为同一命名空间 一:权限管理 二:搜索 | ...

  3. Asp.Net MVC+EF+三层架构的完整搭建过程

    架构图: 使用的数据库: 一张公司的员工信息表,测试数据 解决方案项目设计: 1.新建一个空白解决方案名称为Company 2.在该解决方案下,新建解决方案文件夹(UI,BLL,DAL,Model) ...

  4. Asp.Net MVC+EF+三层架构

    架构图: 使用的数据库: 一张公司的员工信息表,测试数据 解决方案项目设计: 1.新建一个空白解决方案名称为Company 2.在该解决方案下,新建解决方案文件夹(UI,BLL,DAL,Model) ...

  5. 瞧一瞧,看一看呐,用MVC+EF快速弄出一个CRUD,一行代码都不用写,真的一行代码都不用写!!!!

    瞧一瞧,看一看呐用MVC+EF快速弄出一个CRUD,一行代码都不用写,真的一行代码都不用写!!!! 现在要写的呢就是,用MVC和EF弄出一个CRUD四个页面和一个列表页面的一个快速DEMO,当然是在不 ...

  6. ASP.NET MVC+EF框架+EasyUI实现权限管理系列(3)-面向接口的编程

    原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(3)-面向接口的编程 ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇)  (1)框架搭建    (2):数据 ...

  7. 【MVC 1】MVC+EF实体框架—原理解析

    导读:在之前,我们学过了三层框架,即:UI.BLL.DAL.我们将页面显示.逻辑处理和数据访问进行分层,避免了一层.两层的混乱.而后,我们又在经典三层的基础上,应用设计模式:外观.抽象工厂+反射,使得 ...

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

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

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

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

随机推荐

  1. 如何实现在H5里调起高德地图APP?

    http://www.cnblogs.com/milkmap/p/5912350.html 这一篇文章,将讲述如何在H5里调起高德地图APP,并展示兴趣点.适合于展示某个餐馆,商场等,让用户自行选择前 ...

  2. ubuntu系统下怎么安装gcc编译器

    你安装一个名字叫做build-essential的软件包,就可以一次将编译器.make工具.所有的编程头文件.函数库等东东全部安装上,其中也包括gcc编译器,这是非常稳妥的安装方式,安装命令是用roo ...

  3. springmvc返回json数据的工具类

    在ssm框架下,MVC向前端返回数据的json工具类代码如下: public class JsonResult<T> { public static final int SUCCESS=0 ...

  4. [LeetCode] 133. Clone Graph_ Medium tag: BFS, DFS

    Clone an undirected graph. Each node in the graph contains a label and a list of its neighbors. OJ's ...

  5. python+requests接口自动化完整项目设计源码(一)

    原文地址https://www.cnblogs.com/yoyoketang/tag/python接口自动化/ 原文地址https://www.cnblogs.com/yoyoketang/ 原文地址 ...

  6. Vue.Js添加自定义插件

    基于上篇我们讲了 在window下搭建Vue.Js开发环境 我们可以开发自己的vue.js插件发布到npm上,供大家下载使用. 1.首先打开cmd命令窗口,进入我们的工作目录下 执行 cd E:\vu ...

  7. 【codenet】代码相似度计算框架调研 -- 把内容与形式分开

    首发于我的gitpages博客 https://helenawang.github.io/2018/10/10/代码相似度计算框架调研 代码相似度计算框架调研 研究现状 代码相似度计算是一个已有40年 ...

  8. QQ在线客服,默认到要加好友,授权也不起作用需要先开通QQ营销服务

    QQ在线客服,默认到要加好友,授权也不起作用需要先开通QQ营销服务http://wpa.qq.com/msgrd?v=3&uin=你的客服QQ号码&site=qq&menu=y ...

  9. linux chkconfig 管理服务开机自启动

    chkconfig命令主要用来更新(启动或停止)和查询系统服务的运行级信息.谨记chkconfig不是立即自动禁止或激活一个服务,它只是简单的改变了符号连接. 使用语法:chkconfig [--ad ...

  10. GDPR给安全的影响

    违反GDPR的代价过于巨大,因而你不得不为那些预料不到的后果考虑,而且因为无法使用Whois数据,无形中也扩大了威胁界面.因为GDPR的存在,可供黑客入侵的威胁界面显著增长,不是增加了一点点,而是翻了 ...