CoreShop源程序是以数据库优先进行定义的,所以其本身不包含代码优先的定义,但本从更习惯于代码优先,所以为其定义了代码优先的定义。
1 CoreCms.Net.Model.Entities.SysRole
using SqlSugar;
using System.ComponentModel.DataAnnotations;
namespace CoreCms.Net.Model.Entities
{
/// <summary>
/// 【系统角色--类】
/// <remarks>
/// 摘要:
/// 通过该实体类及其属性成员,用于实现当前程序【CoreCms.Net.Model】.【实体集】.【SysRole】实体与“[CoreShop230628].[SysRole]”表之间的CURD的交互操作,并把这些数据存储到数据库设置实例中(内存)。
/// </remarks>
/// </summary>
[SugarTable("SysRole", TableDescription = "角色表")]
public class SysRole
{
/// <summary>
/// 【角色编号】
/// <remarks>
/// 摘要:
/// 获取/设置系统角色实体1个指定实例的整型编号值。
/// IsPrimaryKey:主键
/// IsIdentit:自增
/// </remarks>
/// </summary>
[Display(Name = "角色编号")]
[SugarColumn(ColumnDescription = "角色编号", IsPrimaryKey = true, IsIdentity = true)]
[Required(ErrorMessage = "请输入{0}")]
public int Id { get; set; }
/// <summary>
/// 【角色名称】
/// <remarks>
/// 摘要:
/// 获取/设置1个指定系统角色的名称。
/// </remarks>
/// </summary>
[Display(Name = "角色名称")]
[SugarColumn(ColumnDescription = "角色名称", ColumnDataType = "nvarchar", Length = 50)]
[Required(ErrorMessage = "请输入{0}")]
[StringLength(50, ErrorMessage = "【{0}】不能超过{1}字符长度")]
public string RoleName { get; set; }
/// <summary>
/// 【角色名称】
/// <remarks>
/// 摘要:
/// 获取/设置1个指定系统角色的标识。
/// </remarks>
/// </summary>
[Display(Name = "角色标识")]
[SugarColumn(ColumnDescription = "角色标识", ColumnDataType = "nvarchar", Length = 50, IsNullable = true)]
[StringLength(50, ErrorMessage = "【{0}】不能超过{1}字符长度")]
public string RoleCode { get; set; }
/// <summary>
/// 【角色名称】
/// <remarks>
/// 摘要:
/// 获取/设置1个指定系统角色的备注。
/// </remarks>
/// </summary>
[Display(Name = "备注")]
[SugarColumn(ColumnDescription = "备注", ColumnDataType = "nvarchar", Length = 255, IsNullable = true)]
[StringLength(255, ErrorMessage = "【{0}】不能超过{1}字符长度")]
public string Comments { get; set; }
/// <summary>
/// 【逻辑删除?】
/// <remarks>
/// 摘要:
/// 获取/设置1个值false(可用=0)/true(已经被逻辑删除=1),该值指示系统角色实体的1个指定实例是否已经处于逻辑删除状态。
/// </remarks>
/// </summary>
[Display(Name = "是否删除,0否,1是")]
[SugarColumn(ColumnDescription = "是否删除,0否,1是")]
[Required(ErrorMessage = "请输入{0}")]
public bool Deleted { get; set; }
/// <summary>
/// 【创建时间】
/// <remarks>
/// 摘要:
/// 获取/设置系统角色实体1个指定实例第1次被持久化到系统角色表中的时间。
/// </remarks>
/// </summary>
[Display(Name = "创建时间")]
[SugarColumn(ColumnDescription = "创建时间")]
[Required(ErrorMessage = "请输入{0}")]
public DateTime CreateTime { get; set; }
/// <summary>
/// 【修改时间】
/// <remarks>
/// 摘要:
/// 获取/设置系统角色1个指定实例最后1次被修改后,持久化到系统角色表中的时间。
/// </remarks>
/// </summary>
[Display(Name = "修改时间")]
[SugarColumn(ColumnDescription = "修改时间")]
public DateTime UpdateTime { get; set; }
}
}
2 CoreCms.Net.Model.Entities.SysUser
using SqlSugar;
using System.ComponentModel.DataAnnotations;
namespace CoreCms.Net.Model.Entities
{
/// <summary>
/// 【系统用户--类】
/// <remarks>
/// 摘要:
/// 通过该实体类及其属性成员,用于实现当前程序【CoreCms.Net.Model】.【实体集】.【SysUser】实体与“[CoreShop230628].[SysUser]”表之间的CURD的交互操作,并把这些数据存储到数据库设置实例中(内存)。
/// </remarks>
/// </summary>
[SugarTable("SysUser", TableDescription = "用户表")]
public partial class SysUser
{
/// <summary>
/// 【系统用户色编号】
/// <remarks>
/// 摘要:
/// 获取/设置系统角色实体1个指定实例的整型编号值。
/// IsPrimaryKey:主键
/// IsIdentit:自增
/// </remarks>
/// </summary>
[Display(Name = "用户id")]
[SugarColumn(ColumnDescription = "用户id", IsPrimaryKey = true, IsIdentity = true)]
[Required(ErrorMessage = "请输入{0}")]
public int Id { get; set; }
/// <summary>
/// 【账号】
/// <remarks>
/// 摘要:
/// 获取/设置1个指定系统用户的账号名称。
/// </remarks>
/// </summary>
[Display(Name = "账号")]
[SugarColumn(ColumnDescription = "账号", ColumnDataType = "nvarchar", Length = 50, IsNullable = true)]
[StringLength(50, ErrorMessage = "【{0}】不能超过{1}字符长度")]
public string UserName { get; set; }
/// <summary>
/// 【密码】
/// <remarks>
/// 摘要:
/// 获取/设置1个指定系统用户的登录密码。
/// </remarks>
/// </summary>
[Display(Name = "密码")]
[SugarColumn(ColumnDescription = "密码", ColumnDataType = "nvarchar", Length = 100, IsNullable = true)]
[StringLength(100, ErrorMessage = "【{0}】不能超过{1}字符长度")]
public string PassWord { get; set; }
/// <summary>
/// 【昵称】
/// <remarks>
/// 摘要:
/// 获取/设置1个指定系统用户的昵称。
/// </remarks>
/// </summary>
[Display(Name = "昵称")]
[SugarColumn(ColumnDescription = "昵称", ColumnDataType = "nvarchar", Length = 50, IsNullable = true)]
[StringLength(50, ErrorMessage = "【{0}】不能超过{1}字符长度")]
public string NickName { get; set; }
/// <summary>
/// 【昵称】
/// <remarks>
/// 摘要:
/// 获取/设置1个指定系统用户的头像。
/// 说明:
/// 该属性通过网络格式的绝/相对路径来映射用户头像图片。
/// </remarks>
/// </summary>
[Display(Name = "头像")]
[SugarColumn(ColumnDescription = "头像", ColumnDataType = "nvarchar", Length = 255, IsNullable = true)]
[StringLength(255, ErrorMessage = "【{0}】不能超过{1}字符长度")]
public string Avatar { get; set; }
/// <summary>
/// 【性别】
/// <remarks>
/// 摘要:
/// 获取/设置1个指定系统用户的性别。
/// </remarks>
/// </summary>
[Display(Name = "性别")]
[SugarColumn(ColumnDescription = "性别")]
[Required(ErrorMessage = "请输入{0}")]
public int Sex { get; set; }
/// <summary>
/// 【手机号】
/// <remarks>
/// 摘要:
/// 获取/设置1个指定系统用户的手机号。
/// </remarks>
/// </summary>
[Display(Name = "手机号")]
[SugarColumn(ColumnDescription = "手机号", ColumnDataType = "nvarchar", Length = 50, IsNullable = true)]
[StringLength(50, ErrorMessage = "【{0}】不能超过{1}字符长度")]
public string Phone { get; set; }
/// <summary>
/// 【邮箱】
/// <remarks>
/// 摘要:
/// 获取/设置1个指定系统用户的邮箱。
/// </remarks>
/// </summary>
[Display(Name = "邮箱")]
[SugarColumn(ColumnDescription = "邮箱", ColumnDataType = "nvarchar", Length = 50, IsNullable = true)]
[StringLength(50, ErrorMessage = "【{0}】不能超过{1}字符长度")]
public string Email { get; set; }
/// <summary>
/// 【邮箱验证?】
/// <remarks>
/// 摘要:
/// 获取/设置1个值false(不需要)/true(需要),该值指示1个指定系统用户是否需要在邮箱验证操作后才能执行登录操作。
/// </remarks>
/// </summary>
[Display(Name = "邮箱是否验证")]
[SugarColumn(ColumnDescription = "邮箱是否验证")]
[Required(ErrorMessage = "请输入{0}")]
public bool EmailVerified { get; set; }
/// <summary>
/// 【实名】
/// <remarks>
/// 摘要:
/// 获取/设置1个指定系统用户的实名。
/// </remarks>
/// </summary>
[Display(Name = "真实姓名")]
[SugarColumn(ColumnDescription = "真实姓名", ColumnDataType = "nvarchar", Length = 50, IsNullable = true)]
[StringLength(50, ErrorMessage = "【{0}】不能超过{1}字符长度")]
public string TrueName { get; set; }
/// <summary>
/// 【身份证号】
/// <remarks>
/// 摘要:
/// 获取/设置1个指定系统用户的身份证号。
/// </remarks>
/// </summary>
[Display(Name = "身份证号")]
[SugarColumn(ColumnDescription = "身份证号", ColumnDataType = "nvarchar", Length = 50, IsNullable = true)]
[StringLength(50, ErrorMessage = "【{0}】不能超过{1}字符长度")]
public string IdCard { get; set; }
/// <summary>
/// 【出生日期】
/// <remarks>
/// 摘要:
/// 获取/设置1个指定系统用户的生日。
/// </remarks>
/// </summary>
[Display(Name = "出生日期")]
[SugarColumn(ColumnDescription = "出生日期", IsNullable = true)]
public DateTime? Birthday { get; set; }
/// <summary>
/// 【个人简介】
/// <remarks>
/// 摘要:
/// 获取/设置1个指定系统用户的个人简介。
/// </remarks>
/// </summary>
[Display(Name = "个人简介")]
[SugarColumn(ColumnDescription = "个人简介", ColumnDataType = "nvarchar", Length = 500, IsNullable = true)]
[StringLength(500, ErrorMessage = "【{0}】不能超过{1}字符长度")]
public string Introduction { get; set; }
/// <summary>
/// 【机构编号】
/// <remarks>
/// 摘要:
/// 获取/设置1个指定系统用户的机构编号。
/// </remarks>
/// </summary>
[Display(Name = "机构id")]
[SugarColumn(ColumnDescription = "机构id", IsNullable = true)]
public int? OrganizationId { get; set; }
/// <summary>
/// 【状态】
/// <remarks>
/// 摘要:
/// 获取/设置1个值0(正常)/1 (冻结),该值指示1个指定系统用户是否需要在邮箱验证操作后才能执行登录操作。
/// </remarks>
/// </summary>
[Display(Name = "状态,0正常,1冻结")]
[SugarColumn(ColumnDescription = "状态,0正常,1冻结")]
[Required(ErrorMessage = "请输入{0}")]
public int State { get; set; }
/// <summary>
/// 【逻辑删除?】
/// <remarks>
/// 摘要:
/// 获取/设置1个值false(可用=0)/true(已经被逻辑删除=1),该值指示系统用户实体的1个指定实例是否已经处于逻辑删除状态。
/// </remarks>
/// </summary>
[Display(Name = "是否删除,0否,1是")]
[SugarColumn(ColumnDescription = "是否删除,0否,1是")]
[Required(ErrorMessage = "请输入{0}")]
public bool Deleted { get; set; }
/// <summary>
/// 【注册时间】
/// <remarks>
/// 摘要:
/// 获取/设置系统用户实体1个指定实例第1次被持久化到系统用户表中的时间。
/// </remarks>
/// </summary>
[Display(Name = "注册时间")]
[SugarColumn(ColumnDescription = "注册时间")]
[Required(ErrorMessage = "请输入{0}")]
public DateTime CreateTime { get; set; }
/// <summary>
/// 【修改时间】
/// <remarks>
/// 摘要:
/// 获取/设置系统用户1个指定实例最后1次被修改后,持久化到系统角色表中的时间。
/// </remarks>
/// </summary>
[Display(Name = "修改时间")]
[SugarColumn(ColumnDescription = "修改时间", IsNullable = true)]
public DateTime UpdateTime { get; set; }
}
}
3 CoreCms.Net.Core.Config.SqlSugarSetup
using Microsoft.Extensions.DependencyInjection;
using SqlSugar;
using SqlSugar.IOC;
using System.Reflection;
namespace CoreCms.Net.Core.Config
{
/// <summary>
/// 【SqlSugarCore中间件启动--类】
/// <remarks>
/// 摘要:
/// 通过该类中的方法成员,把SqlSugarCore中间件依赖注入到.Net(Core)框架内置依赖注入容器中。
/// </remarks>
/// </summary>
public static class SqlSugarSetup
{
/// <param name="services">.Net(Core)框架内置依赖注入容器实例。</param>
/// <summary>
/// 【配置服务】
/// <remarks>
/// 摘要:
/// 通过该方法成员,把SqlSugarCore中间件依赖注入到.Net(Core)框架内置依赖注入容器中。。
/// </remarks>
/// </summary>
public static void AddSqlSugarSetup(this IServiceCollection services)
{
if (services == null) throw new ArgumentNullException(nameof(services));
//注入 ORM
SugarIocServices.AddSqlSugar(new IocConfig()
{
//数据库连接
/*ConnectionString = AppSettingsConstVars.DbSqlConnection,
//判断数据库类型
DbType = AppSettingsConstVars.DbDbType == IocDbType.MySql.ToString() ? IocDbType.MySql : IocDbType.SqlServer,*/
ConnectionString = "Server=.;uid=zz;pwd=zz;Database=CoreShop230628;MultipleActiveResultSets=true;pooling=true;min pool size=5;max pool size=32767;connect timeout=20;Encrypt=True;TrustServerCertificate=True;",
DbType = IocDbType.SqlServer,
//是否开启自动关闭数据库连接-//不设成true要手动close
IsAutoCloseConnection = true,
});
//设置参数
services.ConfigurationSugar(db =>
{
db.CurrentConnectionConfig.InitKeyType = InitKeyType.Attribute;
//说明:CoreShop的程序是数据库优先,即必须先生成指定的数据库,本人更为喜欢代码优先所以进行了以下定义来实现代码优先。
//如果指定的数据库软件中不存在指定的数据库,则自动生成该数据库。
db.DbMaintenance.CreateDatabase();
//通过反射操作,获取领域文件夹中的所有实体的类型实例。
//直接获取指定项目中所有类的类型实例。
Assembly assembly = Assembly.Load("CoreCms.Net.Model");
//通过过滤操作,获取领域文件夹中的所有实体的类型实例。
//注意:“Where”过滤操作中“ c.Namespace”最好使用“Contains”,而不要使用“==”。
Type[] _typeArray = assembly.GetTypes()
.Where(c => c.Namespace.Contains("CoreCms.Net.Model.Entities") && c.IsClass)//过滤操作。
.ToArray();
//如果数据库软件对自动生成的数据库支持自动备份操作,则通过下行语句在自动生成该数据库中,根据当前项目中的实体类自动生成相应的表。
//注意:SetStringDefaultLength(stringDefaultLength)必须定义在下行语句中,否则在自动生成表时,该约束定义将不会被映射到表的字段上。
db.CodeFirst.SetStringDefaultLength(50).BackupTable().InitTables(_typeArray);
});
}
}
}
4 Program.cs
using CoreCms.Net.Core.Config;
var builder = WebApplication.CreateBuilder(args);
//添加数据库连接SqlSugar注入支持
builder.Services.AddSqlSugarSetup();
5 CoreCms.Net.Web.Admin.Controllers.SysRoleController
using Microsoft.AspNetCore.Mvc;
using System.ComponentModel;
using SqlSugar;
using SqlSugar.IOC;
using CoreCms.Net.Model.Entities;
namespace CoreCms.Net.Web.Admin.Controllers
{
[ApiController]
[Route("[controller]/[action]")]
public class SysRoleController : ControllerBase
{
private readonly ISqlSugarClient _sqlSugarClient;
private ISqlSugarClient DbBaseClient;
public SysRoleController()
{
_sqlSugarClient = DbScoped.SugarScope;
}
private SqlSugarScope GetDbClient()
{
// 必须要as,后边会用到切换数据库操作
return _sqlSugarClient as SqlSugarScope;
}
#region 获取列表============================================================
[HttpPost]
[Description("获取列表")]
public async Task</*AdminUiCallBack*/ bool> GetPageList()
{
DbBaseClient = GetDbClient();
var v = await DbBaseClient
.Queryable<SysRole>()
.ToListAsync();
return true;
}
#endregion
}
}
对以上功能更为具体实现和注释见:230725_001CoreShop230628(获取数据库中的数据)。