第43章 菜单实体及其约束规则的定义实现
1 Core.Domain.Security.Menu
namespace Core.Domain.Security
{
/// <summary>
/// 【菜单--类】
/// <remarks>
/// 摘要:
/// 通过该实体类及其属性成员,用于实现当前程序【Core】.【领域】.【安全】.【菜单】实体与“[ShopDemo].[Menu]”表之间的CURD的交互操作,并把这些数据存储到数据库设置实例中(内存)。
/// </remarks>
/// </summary>
public class Menu : BaseEntity
{
#region 属性
/// <summary>
/// 【权限编号】
/// <remarks>
/// 摘要:
/// 获取/设置权限实体1个指定实例的长整型编号值。
/// </remarks>
/// </summary>
public long? PermissionId { get; set; }
/// <summary>
/// 【上级菜单编号】
/// <remarks>
/// 摘要:
/// 获取/设置上级菜单实体1个指定实例上级菜单的长整型编号值(根级的父编号值为:0)。
/// </remarks>
/// </summary>
public long ParentId { get; set; }
/// <summary>
/// 【名称】
/// <remarks>
/// 摘要:
/// 获取/设置1个指定菜单的名称。
/// </remarks>
/// </summary>
public string Name { get; set; }
/// <summary>
/// 【菜单级别】
/// <remarks>
/// 摘要:
/// 获取/设置1个指定菜单的级别值(1~3)。
/// </remarks>
/// </summary>
public int Level { get; set; }
/// <summary>
/// 【URL】
/// <remarks>
/// 摘要:
/// 获取/设置1个指定菜单所要跳转的(相对)路由字符串。
/// </remarks>
/// </summary>
public string Url { get; set; }
/// <summary>
/// 【图标】
/// <remarks>
/// 摘要:
/// 获取/设置1个指定菜单所对应的图标。
/// </remarks>
/// </summary>
public string Icon { get; set; }
/// <summary>
/// 【图标颜色】
/// <remarks>
/// 摘要:
/// 获取/设置1个指定菜单所对应图标的颜色。
/// </remarks>
/// </summary>
public string IconColor { get; set; }
#endregion
#region 属性--映射和级联构建
/// <summary>
/// 【单个权限】
/// <remarks>
/// 摘要:
/// 获取/设置1个指定菜单实例所对应的1个权限实例。
/// 说明:
/// 构建权限与菜单实体及其表之间的1:n映射关系,但在实现和逻辑定义实现上以用户为主。
/// </remarks>
/// </summary>
public virtual Permission PermissionSingle { get; set; }
#endregion
}
}
2 重构Core.Domain.Security.Permission
/// <summary>
/// 【菜单集】
/// <remarks>
/// 摘要:
/// 获取/设置1个指定权限实例所对应的所有菜单映射实例。
/// 说明:
/// 构建权限与菜单实体及其表之间的1:n映射关系,但在实现和逻辑定义实现上二者是平等关系。
/// </remarks>
/// </summary>
public virtual ICollection<Menu> MenuCollection { get; set; }
3 Data.Mapping.Security.MenuBuilder
//Nuget
//Nuget--Microsoft.EntityFrameworkCore.SqlServer
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Metadata.Builders;
//项目
using Core.Domain.Security;
namespace Data.Mapping.Security
{
/// <summary>
/// 【菜单生成器--类】
/// <remarks>
/// </remarks>
/// </summary>
public class MenuBuilder : IEntityTypeConfiguration<Menu>
{
#region 方法--IEntityTypeConfiguration<>
///<param name="builder">实体类型生成器实例,用于把当前程序中指定实体和属性所定义的约束规则,映射到数据库指定表及其字段上。</param>
/// <summary>
/// 【配置】
/// <remarks>
/// 摘要:
/// 该方法通过对“EntityFrameworkCore”中间件“IEntityTypeConfiguration<TEntity/>”泛型接口的“Configure”方法的定义,以实现把菜单实体类及其属性成员相关约束规则及其级联关系定义,映射到菜单表及其的相应字段上。
/// </remarks>
/// </summary>
public void Configure(EntityTypeBuilder<Menu> builder)
{
//由于“EntityTypeBuilder<Menu>”的参数已经泛型实例化,因此builder后不能再定义为:“builder.Entity<Menu>().HasKey(menu => menu.Id);”。
//权限表及其字段约束规则,映射定义。
builder.HasKey(menu => menu.Id);
builder.Property(menu => menu.Name).IsRequired().HasMaxLength(255);
builder.Property(menu => menu.Url).HasMaxLength(255);
builder.Property(menu => menu.Icon).HasMaxLength(255);
builder.Property(menu => menu.IconColor).HasMaxLength(255);
}
#endregion
}
}
对以上功能更为具体实现和注释见:230211_037shopDemo(菜单实体及其约束规则的定义实现)。