using Ewide.Core.Entity; using Furion.DatabaseAccessor; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Metadata.Builders; using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations.Schema; using System.Xml.Serialization; namespace Ewide.Core { /// /// 角色表 /// [Table("sys_role")] [Comment("角色表")] public class SysRole : DEntityBase, IEntityTypeBuilder { /// /// 名称 /// [Comment("名称")] public string Name { get; set; } /// /// 编码 /// [Comment("编码")] public string Code { get; set; } /// /// 排序 /// [Comment("排序")] public int Sort { get; set; } /// /// 数据范围类型(字典 1全部数据 2本部门及以下数据 3本部门数据 4仅本人数据 5自定义数据) /// [Comment("数据范围类型")] public int DataScopeType { get; set; } /// /// 备注 /// [Comment("备注")] public string Remark { get; set; } /// /// 状态(字典 0正常 1停用 2删除) /// [Comment("状态")] public CommonStatus Status { get; set; } = CommonStatus.ENABLE; /// /// 多对多(用户) /// [XmlIgnore] public ICollection SysUsers { get; set; } /// /// 多对多中间表(用户角色) /// [XmlIgnore] public List SysUserRoles { get; set; } /// /// 多对多(机构) /// [XmlIgnore] public ICollection SysOrgs { get; set; } /// /// 多对多中间表(角色-机构 数据范围) /// [XmlIgnore] public List SysRoleDataScopes { get; set; } [XmlIgnore] public ICollection AreaNumbers { get; set; } [XmlIgnore] public List SysRoleAreas { get; set; } /// /// 多对多(菜单) /// [XmlIgnore] public ICollection SysMenus { get; set; } /// /// 多对多中间表(角色-菜单) /// [XmlIgnore] 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.AreaNumbers) .WithMany(p => p.SysRoles) .UsingEntity( u => u.HasOne(c => c.AreaNumber).WithMany(c => c.SysRoleAreas).HasForeignKey(c => c.AreaNumberCode), u => u.HasOne(c => c.SysRole).WithMany(c => c.SysRoleAreas).HasForeignKey(c => c.SysRoleId), u => { u.HasKey(c => new { c.SysRoleId, c.AreaNumberCode }); }); 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 }); }); } } }