using Furion.DatabaseAccessor; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Metadata.Builders; using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; namespace iWare.Wms.Core { /// /// 角色表 /// [Table("sys_role")] [Comment("角色表")] public class SysRole : DEntityBase, IEntityTypeBuilder { /// /// 名称 /// [Comment("名称")] [Required, MaxLength(20)] public string Name { get; set; } /// /// 编码 /// [Comment("编码")] [Required, MaxLength(50)] public string Code { get; set; } /// /// 排序 /// [Comment("排序")] public int Sort { get; set; } /// /// 数据范围类型(字典 1全部数据 2本部门及以下数据 3本部门数据 4仅本人数据 5自定义数据) /// [Comment("数据范围类型")] public DataScopeType DataScopeType { get; set; } /// /// 备注 /// [Comment("备注")] [MaxLength(100)] public string Remark { get; set; } /// /// 状态(字典 0正常 1停用 2删除) /// [Comment("状态")] public CommonStatus Status { get; set; } = CommonStatus.ENABLE; /// /// 角色类型-集团角色_0、加盟商角色_1、门店角色_2 /// [Comment("角色类型-集团角色_0、加盟商角色_1、门店角色_2")] public RoleTypeEnum RoleType { get; set; } /// /// 多对多(用户) /// public ICollection SysUsers { get; set; } /// /// 多对多中间表(用户角色) /// public List SysUserRoles { get; set; } /// /// 多对多(机构) /// public ICollection SysOrgs { get; set; } /// /// 多对多中间表(角色-机构 数据范围) /// public List SysRoleDataScopes { get; set; } /// /// 多对多(菜单) /// public ICollection SysMenus { get; set; } /// /// 多对多中间表(角色-菜单) /// public List SysRoleMenus { get; set; } /// /// 配置多对多关系 /// /// /// /// public void Configure(EntityTypeBuilder entityBuilder, DbContext dbContext, Type dbContextLocator) { entityBuilder.HasMany(p => p.SysOrgs) .WithMany(p => p.SysRoles) .UsingEntity( u => u.HasOne(c => c.SysOrg).WithMany(c => c.SysRoleDataScopes).HasForeignKey(c => c.SysOrgId), u => u.HasOne(c => c.SysRole).WithMany(c => c.SysRoleDataScopes).HasForeignKey(c => c.SysRoleId), u => { u.HasKey(c => new { c.SysRoleId, c.SysOrgId }); }); entityBuilder.HasMany(p => p.SysMenus) .WithMany(p => p.SysRoles) .UsingEntity( u => u.HasOne(c => c.SysMenu).WithMany(c => c.SysRoleMenus).HasForeignKey(c => c.SysMenuId), u => u.HasOne(c => c.SysRole).WithMany(c => c.SysRoleMenus).HasForeignKey(c => c.SysRoleId), u => { u.HasKey(c => new { c.SysRoleId, c.SysMenuId }); }); } } }