1.创建一个MVC中的三层架构:UI层,业务层,数据访问层
2.先使用NuGet包添加引用 EntityFramework
然后创建Model的实体类
类似:AdminInfo(AdminInfo,ID,AdminName,AdminPwd等)再根据实体类生成相应的数据库
选择来自数据库的EF设计器点击下一步
选择新建连接
输入自己数据库的服务器名,
选择SQL Server 身份验证,
输入用户名,密码,
选择所需要的数据库。
点击确定
是,否都可以(这个这是保存数据库的连接密码)
点击下一步
选择实体框架6.x
点击下一步
选择表
点击完成
添加一个Operate类(用来判断值)
public class Operate
{
public bool Success { get; set; }
}
4.创建数据访问层、
使用NuGet包添加引用 EntityFramework
使用类库中的EF 6.x DbContext生成器生成数据访问层
在自动生成的 Model1.Context.tt中删除里面所有代码,添加下面代码
<#@ template language="C#" debug="false" hostspecific="true"#>
<#@ include file="EF.Utility.CS.ttinclude"#><#@
output extension=".cs"#>
<#
MetadataLoader loader = new MetadataLoader(this);
string inputFile = @"..\\Admin.Mode\Model1.edmx";//地址修改成自己的实体类的路径
EdmItemCollection ItemCollection = loader.CreateEdmItemCollection(inputFile);
#>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Admin.Mode;//修改成自己的实体类的命名空间
namespace Admin.Mode//修改成自己的数据访问层的命名空间
{
<#
foreach (EntityType entity in ItemCollection.GetItems<EntityType>().OrderBy(e => e.Name))
{
#>
public partial class <#=entity.Name#>Repository : BaseRepository<<#=entity.Name#>,PermissionEntities>//BaseRepository、PermissionEntities下面图片说明
{
}
<#}#>
}
PermissionEntities:在这个里面的类的名称复制过来就可以了
BaseRepository:在数据访问层中添加一个基类
public class BaseRepository<T, TS> where T : class
where TS : DbContext, new()
{
private DbContext db = DbContextFactory<TS>.GetCurrentDbContext();
//添加单条记录
public bool Add(T entily)
{
db.Set<T>().Add(entily);
return db.SaveChanges() > 0;
}
//添加多条记录
public bool AddList(List<T> entily)
{
db.Set<T>().AddRange(entily);
return db.SaveChanges() > 0;
}
//删除
public bool DELETE(T entily)
{
db.Entry(entily).State = EntityState.Deleted;
return db.SaveChanges() > 0;
}
//删除多个
public bool BDELETE(List<T> entiles)
{
db.Set<T>().RemoveRange(entiles);
return db.SaveChanges() > 0;
}
//根据id删除
public bool BatchDELETE(params int[] entiles)
{
foreach (var id in entiles)
{
var entity = db.Set<T>().Find(id);
if (entity != null)
{
db.Set<T>().Remove(entity);
}
}
return db.SaveChanges() > 0;
}
//修改
public bool Update(T entily)
{
db.Entry(entily).State = EntityState.Modified;
return db.SaveChanges() > 0;
}
//查询一个集合
public List<T> QueryList(Expression<Func<T, bool>> lambdaExpression)
{
return db.Set<T>().Where(lambdaExpression).ToList();
}
//查询一个对象,如果没有返回null
public T Query(Expression<Func<T, bool>> lambdaExpression)
{
return db.Set<T>().SingleOrDefault(lambdaExpression);
}
public bool Exists(Expression<Func<T, bool>> lambdaExpression)
{
return db.Set<T>().Any(lambdaExpression);
}
//分页查询
public List<T> QuerypageList<S>(int pageIndex, int pageSize, Expression<Func<T, bool>> wheredma, Expression<Func<T, S>> orderbyLamba, out int count, bool isAc = true)
{
count = db.Set<T>().Where(wheredma).Count();
if (!isAc)
{
return db.Set<T>().Where(wheredma).OrderByDescending(orderbyLamba).Skip((pageIndex - 1) * pageSize).Take(pageSize).ToList();
}
else
{
return db.Set<T>().Where(wheredma).OrderBy(orderbyLamba).Skip((pageIndex - 1) * pageSize).Take(pageSize).ToList();
}
}
}
5.创建业务逻辑层
使用NuGet包添加引用 EntityFramework
在业务逻辑层中添加BaseService基类
public class BaseService<T> where T : class
{
private BaseRepository<T, PermissionEntities1> baseRepository = new BaseRepository<T, PermissionEntities1>();
//添加单条记录
public virtual bool Add(T entily)
{
return baseRepository.Add(entily);
}
//添加多条记录
public virtual bool AddList(List<T> entily)
{
return baseRepository.AddList(entily);
}
//删除
public virtual bool DELETE(T entily)
{
return baseRepository.DELETE(entily);
}
//删除多个
public virtual bool BDELETE(List<T> entiles)
{
return baseRepository.BDELETE(entiles);
}
//根据id删除
public bool BatchDELETE(params int[] entiles)
{
return baseRepository.BatchDELETE(entiles);
}
//修改
public virtual bool Update(T entily)
{
return baseRepository.Update(entily);
}
//查询一个集合
public virtual List<T> QueryList(Expression<Func<T, bool>> lambdaExpression)
{
return baseRepository.QueryList(lambdaExpression);
}
//查询一个对象,如果没有返回null
public virtual T Query(Expression<Func<T, bool>> lambdaExpression)
{
return baseRepository.Query(lambdaExpression);
}
public virtual bool Exists(Expression<Func<T, bool>> lambdaExpression)
{
return baseRepository.Exists(lambdaExpression);
}
//分页查询
public virtual List<T> QuerypageList<S>(int pageIndex, int pageSize, Expression<Func<T, bool>> wheredma, Expression<Func<T, S>> orderbyLamba, out int count, bool isAc = true)
{
return baseRepository.QuerypageList(pageIndex, pageSize, wheredma, orderbyLamba, out count, isAc);
}
}
在数据访问层中创建一个UserService类
public class UserService : BaseService<AdminUser>, IDenpendecy
{
}
6.UI层
使用NuGet包添加引用 EntityFramework
在Models中创建一个上下文AdminContext如图下:
AdminContext代码:
/// <summary>
/// 管理员的上下文
/// </summary>
public class AdminContext
{
/// <summary>
/// 会话的key
/// </summary>
private string SessionKey = "ADMIN_KEY";
/// <summary>
/// 静态的上下文
/// </summary>
public static AdminContext adminContext = new AdminContext();
/// <summary>
///会话状态
/// </summary>
public HttpSessionState httpSessionState => HttpContext.Current.Session;
/// <summary>
/// 用户对象
/// </summary>
public AdminUser adminInfo
{
get
{
return httpSessionState[SessionKey] as AdminUser;
}
set
{
httpSessionState[SessionKey] = value;
}
}
}
Login页面中使用.ajax跳转控制器调方法
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<meta name="renderer" content="webkit|ie-comp|ie-stand">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no" />
<meta http-equiv="Cache-Control" content="no-siteapp" />
<!--[if lt IE 9]>
<script type="text/javascript" src="lib/html5shiv.js"></script>
<script type="text/javascript" src="lib/respond.min.js"></script>
<![endif]-->
<link href="~/static/h-ui/css/H-ui.min.css" rel="stylesheet" type="text/css" />
<link href="~/static/h-ui.admin/css/H-ui.login.css" rel="stylesheet" type="text/css" />
<link href="~/static/h-ui.admin/css/style.css" rel="stylesheet" type="text/css" />
<link href="~/lib/Hui-iconfont/1.0.8/iconfont.css" rel="stylesheet" type="text/css" />
<!--[if IE 6]>
<script type="text/javascript" src="lib/DD_belatedPNG_0.0.8a-min.js" ></script>
<script>DD_belatedPNG.fix('*');</script>
<![endif]-->
<title>后台登录 - H-ui.admin v3.1</title>
<meta name="keywords" content="H-ui.admin v3.1,H-ui网站后台模版,后台模版下载,后台管理系统模版,HTML后台模版下载">
<meta name="description" content="H-ui.admin v3.1,是一款由国人开发的轻量级扁平化网站后台模板,完全免费开源的网站后台管理系统模版,适合中小型CMS后台系统。">
</head>
<body>
<input type="hidden" id="TenantId" name="TenantId" value="" />
<div class="header"></div>
<div class="loginWraper">
<div id="loginform" class="loginBox">
<div>
<div class="row cl">
<label class="form-label col-xs-3"><i class="Hui-iconfont"></i></label>
<div class="formControls col-xs-8">
<input id="name" name="" type="text" placeholder="账户" class="input-text size-L">
</di