1.首先搭建七个项目,各个项目代表层如下:
QinYue.MarKet.Components //组件层
QinYue.MarKet.Infrastructure //基础设施
QinYue.MarKet.Model //实体类
QinYue.MarKet.Repository //数据访问
QinYue.MarKet.Service //业务层
QinYue.MarKet.ViewModel //页面实体类
QinYue.MarKet.Web //UI层
2.在QinYue.MarKet.Model建一个类:
using System;
using System.ComponentModel.DataAnnotations;
namespace QinYue.Market.Model
{
public class AdminInfo
{
/// <summary>
/// 管理员Id
/// </summary>
[Key]
public int AdminId { get; set; }
/// <summary>
/// 真实姓名
/// </summary>
[MaxLength(50)]
public string RealName { get; set; }
/// <summary>
/// 登录名
/// </summary>
public string LoginName { get; set; }
/// <summary>
/// 登录密码
/// </summary>
public string LoginPwd { get; set; }
/// <summary>
/// 性别
/// </summary>
public short Sex { get; set; }
/// <summary>
/// 手机号
/// </summary>
public Int64 Telphone { get; set; }
/// <summary>
/// 邮箱
/// </summary>
public string Email { get; set; }
/// <summary>
/// 角色Id
/// </summary>
public int RoleId { get; set; }
/// <summary>
/// 备注
/// </summary>
public string Remark { get; set; }
/// <summary>
/// 年龄
/// </summary>
public int Age { get; set; }
/// <summary>
/// 创建时间
/// </summary>
public DateTime CreateTime { get; set; }
/// <summary>
/// 最后一次登录时间
/// </summary>
public DateTime LastLoginTime { get; set; }
/// <summary>
/// 登录时间
/// </summary>
public DateTime LoginTime { get; set; }
/// <summary>
/// 修改时间
/// </summary>
public DateTime UpdateTime { get; set; }
/// <summary>
/// QQ
/// </summary>
public string QQ { get; set; }
/// <summary>
/// 状态1:启用 0:禁用
/// </summary>
public short Status { get; set; }
}
}
3.添加三个程序包:
步骤:点击视图-其他窗口-程序包管理器控制台
1.Install-Package Microsoft.EntityFrameworkCore.SqlServer -version 2.1.1
2.Install-Package Microsoft.EntityFrameworkCore.Tools -version 2.1.1
3.Install-Package Microsoft.EntityFrameworkCore.SqlServer.Design
4.数据访问层
添加一个基类
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Dynamic;
using System.Linq.Expressions;
using System.Text;
namespace QinYue.Market.Repository
{
public abstract class RepositoryBase<T> : IRepository<T> where T : class
{
//定义数据访问上下文对象
protected readonly SyDbContext _dbContext;
/// <summary>
/// 通过构造函数注入得到数据上下文对象实例
/// </summary>
/// <param name="dbContext"></param>
public RepositoryBase(SyDbContext dbContext)
{
_dbContext = dbContext;
}
#region 同步
/// <summary>
/// 判断记录是否存在
/// </summary>
/// <param name="predicate">lambda表达式条件</param>
/// <returns></returns>
public bool IsExist(Expression<Func<T, bool>> predicate)
{
return _dbContext.Set<T>().Any(predicate);
}
/// <summary>
/// 新增实体
/// </summary>
/// <param name="entity">实体</param>
/// <param name="autoSave">是否立即执行保存</param>
/// <returns></returns>
public bool Add(T entity, bool autoSave = true)
{
int row = 0;
_dbContext.Set<T>().Add(entity);
if (autoSave)
row = Save();
return (row > 0);
}
/// <summary>
/// 批量添加
/// </summary>
/// <param name="entities">实体列表</param>
/// <param name="autoSave">是否立即执行保存</param>
/// <returns></returns>
public bool AddRange(IEnumerable<T> entities, bool autoSave = true)
{
int row = 0;
_dbContext.Set<T>().AddRange(entities);
if (autoSave)
row = Save();
return (row > 0);
}
/// <summary>
/// 更新实体
/// </summary>
/// <param name="entity">实体</param>
/// <param name="autoSave">是否立即执行保存</param>
public bool Update(T entity, bool autoSave = true)
{
int row = 0;
_dbContext.Update(entity);
if (autoSave)
row = Save();
return (row > 0);
}
/// <summary>
/// 更新实体部分属性
/// </summary>
/// <param name="entity">实体</param>
/// <param name="autoSave">是否立即执行保存</param>
/// <param name="updatedProperties">要更新的字段</param>
/// <returns></returns>
public bool Update(T entity, bool autoSave = true, params Expression<Func<T, object>>[] updatedProperties)
{
int row = 0;
//告诉EF Core开始跟踪实体的更改,
//因为调用DbContext.Attach方法后,EF Core会将实体的State值
//更改回EntityState.Unchanged,
_dbContext.Attach(entity);
if (updatedProperties.Any())