EF做后台登录

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

1.在VS创建实体层类库

7

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

19

1.2从数据库导出数据步骤

2

3

5

9

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

12

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

1111

<#@ 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

14

5.运行页面

24

26

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值