Area地区实体类扩展属性增加IgnoreDataMember特性,规避mvc中无限嵌套验证的问题

This commit is contained in:
智能大石头 2025-03-12 19:43:08 +08:00
parent e133043045
commit 3e91b8186c
13 changed files with 57 additions and 55 deletions

View File

@ -71,7 +71,7 @@
<Column Name="Ex3" DataType="Double" Description="扩展3" Category="扩展" />
<Column Name="Ex4" DataType="String" Description="扩展4" Category="扩展" />
<Column Name="Ex5" DataType="String" Description="扩展5" Category="扩展" />
<Column Name="Ex6" DataType="String" Description="扩展6" Attribute="XmlIgnore, ScriptIgnore, IgnoreDataMember" Category="扩展" />
<Column Name="Ex6" DataType="String" Description="扩展6" Attribute="XmlIgnore, IgnoreDataMember, ScriptIgnore" Category="扩展" />
<Column Name="UpdateUser" DataType="String" Nullable="False" DefaultValue="''" Description="更新者" Model="False" Category="扩展" />
<Column Name="UpdateUserID" DataType="Int32" Description="更新用户" Model="False" Category="扩展" />
<Column Name="UpdateIP" DataType="String" Description="更新地址" Model="False" Category="扩展" />

View File

@ -1,6 +1,7 @@
using System.IO.Compression;
using System.Net;
using System.Net.Http;
using System.Runtime.Serialization;
using System.Text;
using System.Web.Script.Serialization;
using System.Xml.Serialization;
@ -105,15 +106,15 @@ public partial class Area : Entity<Area>
#region
/// <summary>顶级根。它的Childs就是各个省份</summary>
[XmlIgnore, ScriptIgnore]
[XmlIgnore, IgnoreDataMember, ScriptIgnore]
public static Area Root { get; } = new Area();
/// <summary>父级</summary>
[XmlIgnore, ScriptIgnore]
[XmlIgnore, IgnoreDataMember, ScriptIgnore]
public Area Parent => Extends.Get(nameof(Parent), k => FindByID(ParentID) ?? Root)!;
/// <summary>所有父级,从高到底</summary>
[XmlIgnore, ScriptIgnore]
[XmlIgnore, IgnoreDataMember, ScriptIgnore]
public IList<Area> AllParents => Extends.Get(nameof(AllParents), k =>
{
var list = new List<Area>();
@ -159,11 +160,11 @@ public partial class Area : Entity<Area>
}
/// <summary>下级地区</summary>
[XmlIgnore, ScriptIgnore]
[XmlIgnore, IgnoreDataMember, ScriptIgnore]
public IList<Area> Childs => Extends.Get(nameof(Childs), k => FindAllByParentID(ID).Where(e => e.Enable).ToList())!;
/// <summary>子孙级区域。支持省市区,不支持乡镇街道</summary>
[XmlIgnore, ScriptIgnore]
[XmlIgnore, IgnoreDataMember, ScriptIgnore]
public IList<Area> AllChilds => Extends.Get(nameof(AllChilds), k =>
{
var list = new List<Area>();

View File

@ -125,7 +125,7 @@ public partial class User : LogEntity<User>, IUser, IAuthUser, IIdentity
public String LastLoginAddress => LastLoginIP.IPToAddress();
///// <summary>部门</summary>
//[XmlIgnore, ScriptIgnore, IgnoreDataMember]
//[XmlIgnore, IgnoreDataMember, ScriptIgnore]
//public Department Department => Extends.Get(nameof(Department), k => Department.FindByID(DepartmentID));
///// <summary>部门</summary>
@ -602,11 +602,11 @@ public partial class User : LogEntity<User>, IUser, IAuthUser, IIdentity
#region
/// <summary>角色</summary>
/// <remarks>扩展属性不缓存空对象,一般来说,每个管理员都有对应的角色,如果没有,可能是在初始化</remarks>
[XmlIgnore, ScriptIgnore, IgnoreDataMember]
[XmlIgnore, IgnoreDataMember, ScriptIgnore]
IRole IUser.Role => Role;
/// <summary>角色集合</summary>
[XmlIgnore, ScriptIgnore, IgnoreDataMember]
[XmlIgnore, IgnoreDataMember, ScriptIgnore]
public virtual IRole[] Roles => Extends.Get(nameof(Roles), k => GetRoleIDs().Select(e => ManageProvider.Get<IRole>()?.FindByID(e)).Where(e => e != null).ToArray());
/// <summary>获取角色列表。主角色在前,其它角色升序在后</summary>

View File

@ -286,7 +286,7 @@ public partial class User : IUser, IEntity<IUser>
private String? _Ex6;
/// <summary>扩展6</summary>
[XmlIgnore, ScriptIgnore, IgnoreDataMember]
[XmlIgnore, IgnoreDataMember, ScriptIgnore]
[Category("扩展")]
[DisplayName("扩展6")]
[Description("扩展6")]

View File

@ -50,7 +50,7 @@ public partial class TenantUser : Entity<TenantUser>
#region
///// <summary>租户</summary>
//[XmlIgnore, IgnoreDataMember]
//[XmlIgnore, IgnoreDataMember, ScriptIgnore]
////[ScriptIgnore]
//public Tenant Tenant => Extends.Get(nameof(Tenant), k => Tenant.FindById(TenantId));
@ -59,7 +59,7 @@ public partial class TenantUser : Entity<TenantUser>
//public String TenantName => Tenant?.Name;
///// <summary>用户</summary>
//[XmlIgnore, IgnoreDataMember]
//[XmlIgnore, IgnoreDataMember, ScriptIgnore]
////[ScriptIgnore]
//public User User => Extends.Get(nameof(User), k => User.FindByID(UserId));
@ -68,7 +68,7 @@ public partial class TenantUser : Entity<TenantUser>
//public String UserName => User?.Name;
/// <summary>角色</summary>
[XmlIgnore, IgnoreDataMember]
[XmlIgnore, IgnoreDataMember, ScriptIgnore]
IRole ITenantUser.Role => Role;
///// <summary>角色</summary>
@ -76,7 +76,7 @@ public partial class TenantUser : Entity<TenantUser>
//public String RoleName => Role?.Name;
/// <summary>角色集合</summary>
[XmlIgnore, ScriptIgnore, IgnoreDataMember]
[XmlIgnore, IgnoreDataMember, ScriptIgnore]
public virtual IRole[] Roles => Extends.Get(nameof(Roles), k => GetRoleIDs().Select(e => ManageProvider.Get<IRole>()?.FindByID(e)).Where(e => e != null).ToArray());
/// <summary>获取角色列表。主角色在前,其它角色升序在后</summary>

View File

@ -265,7 +265,7 @@ public partial class Menu : EntityTree<Menu>, IMenu
#region
/// <summary>可选权限子项</summary>
[XmlIgnore, ScriptIgnore, IgnoreDataMember]
[XmlIgnore, IgnoreDataMember, ScriptIgnore]
public Dictionary<Int32, String> Permissions { get; set; } = new Dictionary<Int32, String>();
private void LoadPermission()

View File

@ -231,7 +231,7 @@ public partial class Role : LogEntity<Role>, IRole, ITenantSource
private IDictionary<Int32, PermissionFlags> _Permissions;
/// <summary>本角色权限集合</summary>
[XmlIgnore, ScriptIgnore, IgnoreDataMember]
[XmlIgnore, IgnoreDataMember, ScriptIgnore]
public IDictionary<Int32, PermissionFlags> Permissions => _Permissions ??= new Dictionary<Int32, PermissionFlags>();
/// <summary>是否拥有指定资源的指定权限</summary>
@ -353,7 +353,7 @@ public partial class Role : LogEntity<Role>, IRole, ITenantSource
}
/// <summary>当前角色拥有的资源</summary>
[XmlIgnore, ScriptIgnore, IgnoreDataMember]
[XmlIgnore, IgnoreDataMember, ScriptIgnore]
public Int32[] Resources => Permissions.Keys.ToArray();
#endregion

View File

@ -95,7 +95,7 @@ public partial class Department : Entity<Department>, ITenantSource
#region
///// <summary>租户</summary>
//[XmlIgnore, IgnoreDataMember]
//[XmlIgnore, IgnoreDataMember, ScriptIgnore]
//public Tenant Tenant => Extends.Get(nameof(Tenant), k => Tenant.FindById(TenantId));
///// <summary>租户</summary>
@ -103,7 +103,7 @@ public partial class Department : Entity<Department>, ITenantSource
//public String TenantName => Tenant?.Name;
///// <summary>管理者</summary>
//[XmlIgnore, ScriptIgnore, IgnoreDataMember]
//[XmlIgnore, IgnoreDataMember, ScriptIgnore]
//public User Manager => Extends.Get(nameof(Manager), k => User.FindByID(ManagerId));
///// <summary>管理者</summary>
@ -111,7 +111,7 @@ public partial class Department : Entity<Department>, ITenantSource
//public String ManagerName => Manager?.ToString();
/// <summary>父级</summary>
[XmlIgnore, ScriptIgnore, IgnoreDataMember]
[XmlIgnore, IgnoreDataMember, ScriptIgnore]
public Department? Parent => Extends.Get(nameof(Department), k => FindByID(ParentID));
/// <summary>父级</summary>
@ -155,13 +155,13 @@ public partial class Department : Entity<Department>, ITenantSource
/// <summary>
/// 获取子集合
/// </summary>
[XmlIgnore, ScriptIgnore, IgnoreDataMember]
[XmlIgnore, IgnoreDataMember, ScriptIgnore]
public IEnumerable<Department>? ChildList => Extends.Get(nameof(ChildList), k => FindAllByParentId(ID).OrderBy(e => e.ID));
/// <summary>
///是否存在子集
/// </summary>
[XmlIgnore, ScriptIgnore, IgnoreDataMember]
[XmlIgnore, IgnoreDataMember, ScriptIgnore]
public Boolean subset { get; set; }
#endregion

View File

@ -1,4 +1,5 @@
using System.Runtime.Serialization;
using System.Web.Script.Serialization;
using System.Xml.Serialization;
namespace XCode.Transform;
@ -33,27 +34,27 @@ public class ExtractSetting : IExtractSetting
{
#region
/// <summary>开始。大于等于</summary>
[XmlIgnore, IgnoreDataMember]
[XmlIgnore, IgnoreDataMember, ScriptIgnore]
public DateTime Start { get; set; }
/// <summary>结束。小于</summary>
[XmlIgnore, IgnoreDataMember]
[XmlIgnore, IgnoreDataMember, ScriptIgnore]
public DateTime End { get; set; }
/// <summary>时间偏移。距离实时时间的秒数,部分业务不能跑到实时</summary>
[XmlIgnore, IgnoreDataMember]
[XmlIgnore, IgnoreDataMember, ScriptIgnore]
public Int32 Offset { get; set; }
/// <summary>开始行。分页</summary>
[XmlIgnore, IgnoreDataMember]
[XmlIgnore, IgnoreDataMember, ScriptIgnore]
public Int32 Row { get; set; }
/// <summary>步进。最大区间大小,秒</summary>
[XmlIgnore, IgnoreDataMember]
[XmlIgnore, IgnoreDataMember, ScriptIgnore]
public Int32 Step { get; set; }
/// <summary>批大小</summary>
[XmlIgnore, IgnoreDataMember]
[XmlIgnore, IgnoreDataMember, ScriptIgnore]
public Int32 BatchSize { get; set; } = 5000;
///// <summary>启用</summary>

View File

@ -49,14 +49,14 @@ public abstract partial class EntityTree<TKey, TEntity> : Entity<TEntity>, IEnti
}
/// <summary>子节点</summary>
[XmlIgnore, ScriptIgnore, IgnoreDataMember]
[XmlIgnore, IgnoreDataMember, ScriptIgnore]
public virtual IList<TEntity> Childs => Extends.Get(nameof(Childs), e => FindChilds())!;
/// <summary>子节点</summary>
protected virtual IList<TEntity> FindChilds() => FindAllByParent((TKey)this[Setting.Key]!);
/// <summary>父节点</summary>
[XmlIgnore, ScriptIgnore, IgnoreDataMember]
[XmlIgnore, IgnoreDataMember, ScriptIgnore]
public virtual TEntity? Parent => Extends.Get(nameof(Parent), e => FindParent());
/// <summary>父节点</summary>
@ -66,19 +66,19 @@ public abstract partial class EntityTree<TKey, TEntity> : Entity<TEntity>, IEnti
protected static TEntity FindByKeyWithCache(TKey key) => Meta.Session.Cache.Find(e => Equals(e[Setting.Key], key));
/// <summary>子孙节点</summary>
[XmlIgnore, ScriptIgnore, IgnoreDataMember]
[XmlIgnore, IgnoreDataMember, ScriptIgnore]
public virtual IList<TEntity> AllChilds => Extends.Get(nameof(AllChilds), e => FindAllChilds(this))!;
/// <summary>子孙节点,包含自己</summary>
[XmlIgnore, ScriptIgnore, IgnoreDataMember]
[XmlIgnore, IgnoreDataMember, ScriptIgnore]
public virtual IList<TEntity> MyAllChilds => Extends.Get(nameof(MyAllChilds), e => FindAllChilds(this, true))!;
/// <summary>父节点集合</summary>
[XmlIgnore, ScriptIgnore, IgnoreDataMember]
[XmlIgnore, IgnoreDataMember, ScriptIgnore]
public virtual IList<TEntity> AllParents => Extends.Get(nameof(AllParents), e => FindAllParents(this))!;
/// <summary>深度</summary>
[XmlIgnore, ScriptIgnore, IgnoreDataMember]
[XmlIgnore, IgnoreDataMember, ScriptIgnore]
public virtual Int32 Deepth
{
get
@ -109,7 +109,7 @@ public abstract partial class EntityTree<TKey, TEntity> : Entity<TEntity>, IEnti
}
/// <summary>节点名</summary>
[XmlIgnore, ScriptIgnore, IgnoreDataMember]
[XmlIgnore, IgnoreDataMember, ScriptIgnore]
public virtual String? NodeName
{
get
@ -122,7 +122,7 @@ public abstract partial class EntityTree<TKey, TEntity> : Entity<TEntity>, IEnti
}
/// <summary>父级节点名</summary>
[XmlIgnore, ScriptIgnore, IgnoreDataMember]
[XmlIgnore, IgnoreDataMember, ScriptIgnore]
public virtual String? ParentNodeName
{
get
@ -139,7 +139,7 @@ public abstract partial class EntityTree<TKey, TEntity> : Entity<TEntity>, IEnti
/// <summary>树形节点名,根据深度带全角空格前缀</summary>
[DisplayName("节点名")]
[XmlIgnore, ScriptIgnore, IgnoreDataMember]
[XmlIgnore, IgnoreDataMember, ScriptIgnore]
public virtual String TreeNodeName
{
get
@ -156,7 +156,7 @@ public abstract partial class EntityTree<TKey, TEntity> : Entity<TEntity>, IEnti
}
/// <summary>树形节点名,根据深度带全角空格前缀</summary>
[XmlIgnore, ScriptIgnore, IgnoreDataMember]
[XmlIgnore, IgnoreDataMember, ScriptIgnore]
public virtual String TreeNodeName2
{
get
@ -173,7 +173,7 @@ public abstract partial class EntityTree<TKey, TEntity> : Entity<TEntity>, IEnti
}
/// <summary>树形节点名,根据深度带全角空格前缀</summary>
[XmlIgnore, ScriptIgnore, IgnoreDataMember]
[XmlIgnore, IgnoreDataMember, ScriptIgnore]
public virtual String TreeNodeText
{
get
@ -195,11 +195,11 @@ public abstract partial class EntityTree<TKey, TEntity> : Entity<TEntity>, IEnti
}
/// <summary>斜杠分隔的全路径</summary>
[XmlIgnore, ScriptIgnore, IgnoreDataMember]
[XmlIgnore, IgnoreDataMember, ScriptIgnore]
public String FullPath => @"\" + GetFullPath(true);
/// <summary>斜杠分隔的全父路径</summary>
[XmlIgnore, ScriptIgnore, IgnoreDataMember]
[XmlIgnore, IgnoreDataMember, ScriptIgnore]
public String FullParentPath => @"\" + GetFullPath(false);
#endregion

View File

@ -146,15 +146,15 @@ public class MemberSectionTests
#region
/// <summary>顶级根。它的Childs就是各个省份</summary>
[XmlIgnore, ScriptIgnore]
[XmlIgnore, IgnoreDataMember, ScriptIgnore]
public static Area Root { get; } = new Area();
/// <summary>父级</summary>
[XmlIgnore, ScriptIgnore]
[XmlIgnore, IgnoreDataMember, ScriptIgnore]
public Area Parent => Extends.Get(nameof(Parent), k => FindByID(ParentID) ?? Root);
/// <summary>所有父级</summary>
[XmlIgnore, ScriptIgnore]
[XmlIgnore, IgnoreDataMember, ScriptIgnore]
public IList<Area> AllParents => Extends.Get(nameof(AllParents), k =>
{
var list = new List<Area>();
@ -200,11 +200,11 @@ public class MemberSectionTests
}
/// <summary>下级地区</summary>
[XmlIgnore, ScriptIgnore]
[XmlIgnore, IgnoreDataMember, ScriptIgnore]
public IList<Area> Childs => Extends.Get(nameof(Childs), k => FindAllByParentID(ID).Where(e => e.Enable).ToList());
/// <summary>子孙级区域。支持省市区,不支持乡镇街道</summary>
[XmlIgnore, ScriptIgnore]
[XmlIgnore, IgnoreDataMember, ScriptIgnore]
public IList<Area> AllChilds => Extends.Get(nameof(AllChilds), k =>
{
var list = new List<Area>();
@ -408,13 +408,13 @@ public class MemberSectionTests
var code =
"""
#region
[XmlIgnore, ScriptIgnore, IgnoreDataMember]
[XmlIgnore, IgnoreDataMember, ScriptIgnore]
public Product Product => Extends.Get(nameof(Product), k => Product.FindById(ProductId));
[Map(nameof(ProductId), typeof(Product), "Id")]
public String ProductName => Product?.Name;
[XmlIgnore, ScriptIgnore, IgnoreDataMember]
[XmlIgnore, IgnoreDataMember, ScriptIgnore]
public DeviceGroup Group => Extends.Get(nameof(Group), k => DeviceGroup.FindById(GroupId));
[Map(nameof(GroupId), typeof(DeviceGroup), "Id")]
@ -425,7 +425,7 @@ public class MemberSectionTests
public String AreaName => Area.FindByIDs(CityId, ProvinceId)?.Path;
/// <summary>父级设备</summary>
[XmlIgnore, IgnoreDataMember]
[XmlIgnore, IgnoreDataMember, ScriptIgnore]
//[ScriptIgnore]
public Device Parent => Extends.Get(nameof(Parent), k => Device.FindById(ParentId));
@ -434,18 +434,18 @@ public class MemberSectionTests
public String ParentName => Parent?.Name;
/// <summary>子设备。借助扩展属性缓存</summary>
[XmlIgnore, IgnoreDataMember]
[XmlIgnore, IgnoreDataMember, ScriptIgnore]
public IList<Device> Childs => Extends.Get(nameof(Childs), k => FindAllByParent(Id));
/// <summary>设备属性。借助扩展属性缓存</summary>
[XmlIgnore, IgnoreDataMember]
[XmlIgnore, IgnoreDataMember, ScriptIgnore]
public IList<DeviceProperty> Properties => Extends.Get(nameof(Properties), k => DeviceProperty.FindAllByDeviceId(Id));
/// <summary>设备服务。借助扩展属性缓存</summary>
[XmlIgnore, IgnoreDataMember]
[XmlIgnore, IgnoreDataMember, ScriptIgnore]
public IList<DeviceService> Services => Extends.Get(nameof(Services), k => DeviceService.FindAllByDeviceId(Id));
[XmlIgnore, ScriptIgnore, IgnoreDataMember]
[XmlIgnore, IgnoreDataMember, ScriptIgnore]
protected Boolean IgnoreVaild { get; set; } = false;
#endregion
""";

View File

@ -287,7 +287,7 @@ public partial class User
private String? _Ex6;
/// <summary>扩展6</summary>
[XmlIgnore, ScriptIgnore, IgnoreDataMember]
[XmlIgnore, IgnoreDataMember, ScriptIgnore]
[Category("扩展")]
[DisplayName("扩展6")]
[Description("扩展6")]

View File

@ -217,7 +217,7 @@ public partial class User2
private String _Ex6;
/// <summary>扩展6</summary>
[XmlIgnore, ScriptIgnore, IgnoreDataMember]
[XmlIgnore, IgnoreDataMember, ScriptIgnore]
[DisplayName("扩展6")]
[Description("扩展6")]
[DataObjectField(false, false, true, 50)]