1.在VS创建实体层类库

1.1右击实体类添加-创建类-ADO.NET


1.2从数据库导出数据步骤




2.创建数据访问层的类库并且添加-类-选择点击EF6

2.0 写代码或者修改(根据自己的实体层修改)

![]()
<#@ template language="C#" debug="false" hostspecific="true"#>
<#@ include file="EF.Utility.CS.ttinclude"#><#@
output extension=".cs"#>
<#
CodeGenerationTools code = new CodeGenerationTools(this);
MetadataLoader loader = new MetadataLoader(this);
CodeRegion region = new CodeRegion(this, 1);
MetadataTools ef = new MetadataTools(this);
string inputFile = @"..\\EFProject.Mode\Model1.edmx";
EdmItemCollection ItemCollection = loader.CreateEdmItemCollection(inputFile);
string namespaceName = code.VsNamespaceSuggestion();
EntityFrameworkTemplateFileManager fileManager = EntityFrameworkTemplateFileManager.Create(this);
#>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using EFProject.Mode
namespace EFProject.Mode.Repository
{
<#
foreach (EntityType entity in ItemCollection.GetItems<EntityType>().OrderBy(e => e.Name))
{
#>
public partial class <#=entity.Name#>Repository : BaseRepository<<#=entity.Name#>,InfoManagerSystemEntities1>
{
}
<#}#>
}
2.1添加基类BaseRepositsy
using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace EFProject.DAL
{
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();
}
}
}
}
2.2添加DBContextFactory类
using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Linq;
using System.Runtime.Remoting.Messaging;
using System.Text;
using System.Threading.Tasks;
namespace EFProject.DAL
{
public class DbContextFactory<TS> where TS : DbContext, new()
{
public static DbContext GetCurrentDbContext()
{
var dbContext = CallContext.GetData(typeof(TS).Name) as DbContext;
if (dbContext != null)
{
return dbContext;
}
else
{
dbContext = new TS();
CallContext.SetData(typeof(TS).Name, dbContext);
return dbContext;
}
}
}
}
3创建业务层的类库并且在引用导包EntityFramework包
3。1.编写BaseService类
using EFProject.DAL;
using EFProject.Mode;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace EFProject.Service
{
public class BaseService<T> where T : class
{
private BaseRepository<T, InfoManagerSystemEntities1> baseRepository = new BaseRepository<T, InfoManagerSystemEntities1>();
//添加单条记录
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);
}
}
}
}
3.2编写AdminUserService类(记住密码)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Zhongjiali.ManagerSys.Modles;
namespace Zhongjiali.ManagerSys.Service
{
public class AdminUserService : BaseService<User>
{
#region 使用lambdam表达式
/// <summary>
/// 记住密码
/// </summary>
/// <param name="users"></param>
/// <returns></returns>
public User AdminByReader(User users)
{
return Query(a => a.UserName == users.UserName && a.UserPwd == users.UserPwd);
}
#endregion
}
}
4创建web(MVC)项目并且在引用下载EntityFramework包
4.1在控制器里写登陆操作(包含Cookie和Session)
#region 登陆操作
/// <summary>
/// 登陆
/// </summary>
/// <param name="name"></param>
/// <param name="password"></param>
/// <returns></returns>
public JsonResult Query(User users)
{
AdminUserService adminUserService = new AdminUserService();
OperateResult result = new OperateResult();
User user = users;
Expression<Func<User, bool>> lambdaExpression = a => a.UserName==users.UserName && a.UserPwd==users.UserPwd;
//调用业务层的lamdam表达式的记住密码
user= adminUserService.AdminByReader(user);
result.Success = adminUserService.Query(lambdaExpression) != null;
if(result.Success)
{
//创建Cookie对象
HttpCookie httpCookie = new HttpCookie("CookieName");
httpCookie.Values.Add("UserName", user.UserName);
httpCookie.Values.Add("UserPwd", user.UserPwd);
//设置过期时间
httpCookie.Values.Add("time",DateTime.Now.AddDays(7).ToString());
//添加Cookie对象
System.Web.HttpContext.Current.Response.Cookies.Add(httpCookie);
}
//给上下文赋值
AdminContext.context.adminUser = user;
return Json(result);
}
#endregion
#region 去除session和cookie
public ActionResult AdminOut()
{
//清除session
AdminContext.context.adminUser = null;
//获取cookie
HttpCookie cok = Response.Cookies["UserName"];
if (cok != null)
{
cok.Values.Clear();
}
return Redirect("/Home/login");
}
#endregion
4.2在Models文件添加一个上下文类(Session)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.SessionState;
using Zhongjiali.ManagerSys.Modles;
namespace Zhongjiali.ManagerSys.Web.Models
{
public class AdminContext
{
/// <summary>
/// 设置key值
/// </summary>
private const string sessionKey = "AdminInfo_session_Key";
public HttpSessionState httpSession => HttpContext.Current.Session;
/// <summary>
/// 设置静态 上下文
/// </summary>
public static AdminContext context = new AdminContext();
/// <summary>
/// 设置用户表
/// </summary>
public User adminUser
{
get
{
return httpSession[sessionKey] as User;
}
set
{
httpSession[sessionKey] = value;
}
}
}
}
4.3登陆页面和首页放入View下的HOME文件里,页面结尾是html改为cshtml,并且在登陆页面上改j s ↵
和css路径加~/,最后在页面上操作(包含验证码)
<script>
$(function () {
//页面加载刷新验证码
var show_num = [];
draw(show_num);
//点击图片刷新验证码
$("#canvas").on('click', function () {
draw(show_num);
})
layui.use('form', function () {
var form = layui.form,
layer = layui.layer,
$ = layui.jquery;
//表单提交
//form.on('submit(login)', function (operateResult) {
// //验证码校验
// var val = $("#code").val().toLowerCase();
// var num = show_num.join("");
// if(val==''){
// layer.alert('请输入验证码!');
// }else if(val != num){
// layer.alert('验证码错误!请重新输入!');
// $("#code").val('');
// draw(show_num);
// }
// else
// {
// if (operateResult.Success) {
// //验证码校验成功之后提交到后台
// layer.alert('登录成功!');
// window.location.href = '/Home/Index';
// }
// }
// return false;
//});
});
$("#login_btn").click(function () {
var data = {};
data.UserName = $("#username").val();
data.UserPwd = $("#pwd").val();
//验证码校验
var val = $("#code").val().toLowerCase();
var num = show_num.join("");
if (val == '') {
layer.alert('请输入验证码!');
} else if (val != num) {
layer.alert('验证码错误!请重新输入!');
$("#code").val('');
draw(show_num);
}
else {
$.ajax({
data: data,
type: "post",
url: "/AdminUser/Query",
success: function (result) {
if (result.Success) {
layer.alert('登录成功!', {
title: '提示框',
icon: 1,
});
location.href = "/Home/Index";
layer.close(index);
} else {
layer.alert('登录失败!', {
title: '提示框',
icon: 1,
});
}
}
})
}
})
});
</script>
4.4将View文件下的ViewStart.cshtml中的layout=null

5.运行页面

![]()
本文介绍了如何使用Entity Framework(EF)构建后台登录系统。首先在VS创建实体层类库,并从数据库导出数据。接着创建数据访问层和业务层,编写BaseRepository、DBContextFactory以及AdminUserService。然后在MVC项目中添加控制器和登录操作,使用Cookie和Session管理。同时,配置Models文件的上下文类,创建视图并处理登陆页面的HTML、CSS和JavaScript。最后,运行页面完成登录功能。
2363

被折叠的 条评论
为什么被折叠?



