EF后台登陆+列表增删改查

本文介绍了如何在ASP.NET MVC项目中利用Entity Framework(EF)进行后台登录验证,并实现列表、添加、删除和修改功能。首先创建MVC Web项目和实体类库,接着设置数据库连接,生成EF数据模型。然后创建数据访问层和业务逻辑层,实现数据操作。在UI层,创建控制器、视图并应用过滤器进行权限管理和异常处理。最后,展示了登录验证、增删改查的代码实现。
摘要由CSDN通过智能技术生成

 

 

 

1:创建MVCWeb项目

2:创建实体类库项目 NuGet包添加引用 EntityFramework

使用ADO.NET实体数据模型(在右键添加>新建项 中查找)

输入自己数据库的服务器名

选择SQL Server 身份验证

输入用户名,密码

选择所需要的数据库

点击确定

是,否都可以(这个这是保存数据库的连接密码)

点击下一步

选择实体框架6.x

点击下一步

选择

点击完成

在该实体项目中添加一

个自定义的Operate类(用于增删改返回页面是否成功的判断值)

public class Operate
    {
        public bool Success { get; set; }
    }

3:创建数据访问层

使用NuGet包添加引用 EntityFramework

使用类库中的EF 6.x DbContext生成器生成数据访问层(在右键添加>新建项 中查找)

在Model1(可能是在MOdel1.Context.tt中修改)中修改T4模板 模板代码如下:


//T4模板
 
<#@ template language="C#" debug="false" hostspecific="true"#>
<#@ include file="EF.Utility.CS.ttinclude"#><#@
 output extension=".cs"#>
 
<#
 
MetadataLoader loader = new MetadataLoader(this);
string inputFile = @"..\\XinYue.Ado.Net.Mode\Model1.edmx";   		//把XinYue.Ado.Net.Mode改成自己的实体类
EdmItemCollection ItemCollection = loader.CreateEdmItemCollection(inputFile);
#>
 
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using XinYue.Ado.Net.Mode;			//改成自己的实体类
 
namespace XinYue.Ado.Net.DAL   		 //改成自己数据访问层的命名空间
{
   
<#
foreach (EntityType entity in ItemCollection.GetItems<EntityType>().OrderBy(e => e.Name))
{
#>
	 public partial class <#=entity.Name#>Repository : BaseRepository<<#=entity.Name#>,AdoNetEntities>
     {
		
     }	
<#}#>
	
}

然后在数据访问层添加BaseRepository和DbContextFactory类 如下:


public class BaseRepository<T, BS> where T : class where BS : DbContext, new()
    {
        //当前操作数据库实例
        private DbContext db = DbContextFactory<BS>.GetGurrentDbContext();
 
        #region 添加数据
        /// <summary>
        /// 添加单条记录
        /// </summary>
        /// <param name="entity"></param>
        /// <returns></returns>
        public bool Add(T entity)
        {
            db.Set<T>().Add(entity);
            return db.SaveChanges() > 0;
        }
        /// <summary>
        /// 添加多条记录
        /// </summary>
        /// <param name="entitys"></param>
        /// <returns></returns>
        public bool AddRange(List<T> entitys)
        {
            db.Set<T>().AddRange(entitys);
            return db.SaveChanges() > 0;
        }
        #endregion
 
        #region 修改数据
        /// <summary>
        /// 修改数据
        /// </summary>
        /// <param name="entity"></param>
        /// <returns></returns>
        public bool Update(T entity)
        {
            db.Entry(entity).State = EntityState.Modified;
            return db.SaveChanges() > 0;
        }
        #endregion
 
        #region 删除数据
        /// <summary>
        /// 删除单条数据
        /// </summary>
        /// <param name="entity"></param>
        /// <returns></returns>
        public bool Delete(T entity)
        {
            db.Entry(entity).State = EntityState.Deleted;
            return db.SaveChanges() > 0;
        }
 
        /// <summary>
        /// 批量删除
        /// </summary>
        /// <param name="entity"></param>
        /// <returns></returns>
        public bool BatchDelete(List<T> entitys)
        {
            db.Set<T>().RemoveRange(entitys);
            return db.SaveChanges() > 0;
        }
 
        /// <summary>
        /// 根据ID批量删除
        /// </summary>
        /// <param name="entity"></param>
        /// <returns></returns>
        public bool BatchDeleteByID(params int[] IDs)
        {
            foreach (var id in IDs)
            {
                var entity = db.Set<T>().Find(id);
                if (entity != null) db.Set<T>().Remove(entity);
            }
            return db.SaveChanges() > 0;
        }
        #endregion
 
        #region 查询数据
        /// <summary>
        /// 查询返回一个集合
        /// </summary>
        /// <param name="lambdaExpression"></param>
        /// <returns></returns>
        public List<T> QueryList(Expression<Func<T, bool>> lambdaExpression)
        {
            return db.Set<T>().Where(lambdaExpression).ToList();
        }
        /// <summary>
        /// 查询返回一个对象
        /// </summary>
        /// <param name="lambdaExpression"></param>
        /// <returns></returns>
        public T Query(Expression<Func<T, bool>> lambdaExpression)
        {
            return db.Set<T>().SingleOrDefault(lambdaExpression);
        }
        /// <summary>
        /// 查询是否存在
        /// </summary>
        /// <param name="lambdaExpression"></param>
        /// <returns></returns>
        public bool Exists(Expression<Func<T, bool>> lambdaExpression)
        {
            return db.Set<T>().Any(lambdaExpression);
        } ///
        #endregion
 
        #region 查询分页
        public List<T> QueryPageList<S>(int PageIndex, int PageSize, Expression<Func<T, bool>> Wherelambda, Expression<Func<T, S>> OrderBylambda, out int count, bool isAsc = true)
        {
            //获取总数
            count = db.Set<T>().Where(Wherelambda).Count();
 
            if (!isAsc)
                return db.Set<T>().Where(Wherelambda)
                    .OrderByDescending(OrderBylambda)
                    .Skip((PageIndex - 1) * PageSize)
                    .Take(PageSize).ToList();
 
            return db.Set<T>().Where(Wherelambda)
                   .OrderBy(OrderBylambda)
                   .Skip((PageIndex - 1) * PageSize)
                   .Take(PageSize).ToList();
        }
        #endregion
    }
public class DbContextFactory<BS> where BS : DbContext, new()
    {
        /// <summary>
        /// 唯一实例
        /// </summary>
        /// <returns></returns>
        public static DbContext GetGurrentDbContext()
        {
            //CallContext保证实例唯一
            var dbContext = CallContext.GetData(typeof(BS).Name) as DbContext;
            //不为空直接返回
            if (dbContext != null) return dbContext;
            //为空则new 添加类条件new()使BS能够实例化
            dbContext = new BS();
            //重新设置
            CallContext.SetData(typeof(BS).Name, dbContext);
            return dbContext;
        }
    }

4.创建业务逻辑层

使用NuGet包添加引用 EntityFramework

在业务逻辑层中添加AdminInfoService类 该类继承BaseService基类 两类如下:

public class AdminInfoService : BaseService<AdminInfo>
    {

    }
//所有业务逻辑层的基类
public class BaseService<T> where T : class
    {
        //当前操作数据访问层实例
        private BaseRepository<T, AdoNetEntities> baseRepository = new BaseRepository<T, AdoNetEntities>();

        #region 添加数据
        /// <summary>
        /// 添加单条记录
        /// </summary>
        /// <param name="entity"></param>
        /// <returns></returns>
        public bool Add(T entity)
        {
            return baseRepository.Add(entity);
        }
        /// <summary>
        /// 添加多条记录
        /// </summary>
        /// <param name="entitys"></param>
        /// <returns></returns>
        public bool AddRange(List<T> entitys)
        {
            return baseRepository.AddRange(entitys);
        }
        #endregion

        #region 修改数据
        /// <summary>
        /// 修改数据
        /// </summary>
        /// <param name="entity"></param>
        /// <returns></returns>
        public bool Update(T entity)
        {
            return baseRepository.Update(entity);
        }
        #endregion

        #region 删除数据
        /// <summary>
        /// 删除单条数据
        /// </summary>
        /// <param name="entity"></param>
        /// <returns></returns>
        public bool Delete(T entity)
        {
            return baseRepository.Delete(entity);
        }

        /// <summary>
        /// 批量删除
        /// </summary>
        /// <param name="entity"></param>
        /// <returns></returns>
        public bool BatchDelete(List<T> entitys)
        {
            return baseRepository.BatchDelete(entitys);
        }

        /// <summary>
        /// 根据ID批量删除
        /// </summary>
        /// <param name="entity"></param>
        /// <returns></returns>
        public bool BatchDeleteByID(params int[] IDs)
        {
            return baseRepository.BatchDeleteByID(IDs);
        }
        #endregion

        #region 查询数据
        /// <summary>
        /// 查询返回一个集合
        /// </summary>
        /// &
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值