当前位置: 首页 > news >正文

第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(菜单实体及其约束规则的定义实现)。

http://www.lryc.cn/news/2435.html

相关文章:

  • OpenAI最重要的模型【CLIP】
  • 分享112个JS菜单导航,总有一款适合您
  • MySQL 3:MySQL数据库基本操作 DQL
  • sql语句的优化
  • Shell脚本之——自动安装JDK
  • 大数据---Hadoop安装Hadoop简易版
  • Spring框架中使用到的设计模式以及对应的类(方法)
  • 类和类的定义
  • 丝绸之路——NFT 系列来袭!
  • 配置CMAKE编译环境:VSCODE + MinGW
  • 六、mybatis与spring的整合
  • JavaWeb--JDBC
  • 大数据框架之Hadoop:入门(四)Hadoop运行模式
  • 《爆肝整理》保姆级系列教程python接口自动化(十一)--发送post【data】(详解
  • 【微服务】Nacos注册中心
  • 跟开发打了半个月后,我终于get报bug的正确姿势了
  • js万能类型检测Object.prototype.toString.call——定制Object.prototype.toString.call的检测结果
  • 激光slam学习笔记2--激光点云数据结构特点可视化查看
  • SpringBoot笔记【JavaEE】
  • 目标检测算法之voxelNet与pointpillars对比
  • 电脑里的连接速度双工模式是什么?怎么设置
  • springboot整合单机缓存ehcache
  • 在阿里干了2年的测试,总结出来的划水经验
  • 硬盘分类及挂载硬盘知识补充和介绍
  • 【MyBatis】自定义映射resultMap
  • mysql的锁和事务
  • 为什么B站中的弹幕可以不遮挡人物
  • 数据结构 第八章 查找(静态查找表)
  • 【Python基础】数据类型(元组、列表)
  • 你了解互联网APP搜索和推荐的背后逻辑么?