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>
/// &