地区的扩展属性AllParents和AllChilds改为方法,避免asp.net验证时进入无限深度
This commit is contained in:
parent
521ee5c0d7
commit
9c5ac245b2
|
@ -113,9 +113,14 @@ public partial class Area : Entity<Area>
|
|||
[XmlIgnore, IgnoreDataMember, ScriptIgnore]
|
||||
public Area Parent => Extends.Get(nameof(Parent), k => FindByID(ParentID) ?? Root)!;
|
||||
|
||||
///// <summary>所有父级,从高到底</summary>
|
||||
//[XmlIgnore, IgnoreDataMember, ScriptIgnore]
|
||||
//[Obsolete("=>GetAllParents")]
|
||||
//public IList<Area> AllParents => Extends.Get(nameof(AllParents), k => GetAllParents())!;
|
||||
|
||||
/// <summary>所有父级,从高到底</summary>
|
||||
[XmlIgnore, IgnoreDataMember, ScriptIgnore]
|
||||
public IList<Area> AllParents => Extends.Get(nameof(AllParents), k =>
|
||||
/// <returns></returns>
|
||||
public IList<Area> GetAllParents()
|
||||
{
|
||||
var list = new List<Area>();
|
||||
var entity = Parent;
|
||||
|
@ -132,14 +137,14 @@ public partial class Area : Entity<Area>
|
|||
list.Reverse();
|
||||
|
||||
return list;
|
||||
})!;
|
||||
}
|
||||
|
||||
/// <summary>父级路径</summary>
|
||||
public String ParentPath
|
||||
public String? ParentPath
|
||||
{
|
||||
get
|
||||
{
|
||||
var list = AllParents;
|
||||
var list = GetAllParents();
|
||||
if (list != null && list.Count > 0) return list.Where(r => !r.IsVirtual).Join("/", r => r.Name);
|
||||
|
||||
return Parent?.Name;
|
||||
|
@ -163,18 +168,22 @@ public partial class Area : Entity<Area>
|
|||
[XmlIgnore, IgnoreDataMember, ScriptIgnore]
|
||||
public IList<Area> Childs => Extends.Get(nameof(Childs), k => FindAllByParentID(ID).Where(e => e.Enable).ToList())!;
|
||||
|
||||
///// <summary>子孙级区域。支持省市区,不支持乡镇街道</summary>
|
||||
//[XmlIgnore, IgnoreDataMember, ScriptIgnore]
|
||||
//[Obsolete("=>GetAllChilds")]
|
||||
//public IList<Area> AllChilds => Extends.Get(nameof(AllChilds), k => GetAllChilds())!;
|
||||
|
||||
/// <summary>子孙级区域。支持省市区,不支持乡镇街道</summary>
|
||||
[XmlIgnore, IgnoreDataMember, ScriptIgnore]
|
||||
public IList<Area> AllChilds => Extends.Get(nameof(AllChilds), k =>
|
||||
public IList<Area> GetAllChilds()
|
||||
{
|
||||
var list = new List<Area>();
|
||||
foreach (var item in Childs)
|
||||
{
|
||||
list.Add(item);
|
||||
if (item.Level < 3) list.AddRange(item.AllChilds);
|
||||
if (item.Level < 3) list.AddRange(item.GetAllChilds());
|
||||
}
|
||||
return list;
|
||||
});
|
||||
}
|
||||
|
||||
/// <summary>是否虚拟地区</summary>
|
||||
public Boolean IsVirtual => Name.EqualIgnoreCase("市辖区", "直辖县", "直辖镇");
|
||||
|
@ -508,7 +517,7 @@ public partial class Area : Entity<Area>
|
|||
var r = FindByNames(ss);
|
||||
if (r != null)
|
||||
{
|
||||
list.AddRange(r.AllParents);
|
||||
list.AddRange(r.GetAllParents());
|
||||
list.Add(r);
|
||||
|
||||
if (maxLevel > 0 && list.Count > maxLevel) list = list.Take(maxLevel).ToList();
|
||||
|
@ -539,7 +548,7 @@ public partial class Area : Entity<Area>
|
|||
var r = FindAddress(Root, address, maxLevel);
|
||||
if (r != null)
|
||||
{
|
||||
list.AddRange(r.AllParents);
|
||||
list.AddRange(r.GetAllParents());
|
||||
list.Add(r);
|
||||
}
|
||||
|
||||
|
|
|
@ -122,7 +122,7 @@ public partial class User : LogEntity<User>, IUser, IAuthUser, IIdentity
|
|||
#region 扩展属性
|
||||
/// <summary>物理地址</summary>
|
||||
[DisplayName("物理地址")]
|
||||
public String LastLoginAddress => LastLoginIP.IPToAddress();
|
||||
public String? LastLoginAddress => LastLoginIP?.IPToAddress();
|
||||
|
||||
///// <summary>部门</summary>
|
||||
//[XmlIgnore, IgnoreDataMember, ScriptIgnore]
|
||||
|
@ -137,7 +137,7 @@ public partial class User : LogEntity<User>, IUser, IAuthUser, IIdentity
|
|||
/// 地区名
|
||||
/// </summary>
|
||||
[Map(nameof(AreaId))]
|
||||
public String AreaName => Area.FindByID(AreaId)?.Path;
|
||||
public String? AreaName => Area.FindByID(AreaId)?.Path;
|
||||
#endregion
|
||||
|
||||
#region 扩展查询
|
||||
|
@ -693,7 +693,7 @@ public partial interface IUser
|
|||
IRole[] Roles { get; }
|
||||
|
||||
/// <summary>角色名</summary>
|
||||
String RoleName { get; }
|
||||
String? RoleName { get; }
|
||||
|
||||
/// <summary>用户是否拥有当前菜单的指定权限</summary>
|
||||
/// <param name="menu">指定菜单</param>
|
||||
|
|
|
@ -40,16 +40,16 @@ public class AreaTests
|
|||
|
||||
XTrace.WriteLine("北京");
|
||||
r = Area.FindByName(0, "北京");
|
||||
Assert.Equal(17, r.AllChilds.Count);
|
||||
Assert.Equal("北京/延庆", r.AllChilds[^1].Path);
|
||||
Assert.Equal(17, r.GetAllChilds().Count);
|
||||
Assert.Equal("北京/延庆", r.GetAllChilds()[^1].Path);
|
||||
|
||||
XTrace.WriteLine("容县");
|
||||
r = Area.FindByID(450921);
|
||||
Assert.Equal("容县", r.Name);
|
||||
Assert.Equal(2, r.AllParents.Count);
|
||||
Assert.Equal(2, r.GetAllParents().Count);
|
||||
Assert.Equal("广西/玉林", r.ParentPath);
|
||||
Assert.Equal(15, r.AllChilds.Count);
|
||||
Assert.Equal("广西/玉林/容县/容州", r.AllChilds[0].Path);
|
||||
Assert.Equal(15, r.GetAllChilds().Count);
|
||||
Assert.Equal("广西/玉林/容县/容州", r.GetAllChilds()[0].Path);
|
||||
|
||||
var r2 = Area.FindByIDs(450921102, 450921, 450900, 450000);
|
||||
Assert.Equal("杨梅", r2.Name);
|
||||
|
@ -153,6 +153,51 @@ public class AreaTests
|
|||
}
|
||||
}
|
||||
|
||||
[TestOrder(50)]
|
||||
[Fact]
|
||||
public void ParentTest()
|
||||
{
|
||||
var ar = Area.FindByID(450921102);
|
||||
Assert.Equal("杨梅", ar.Name);
|
||||
|
||||
var ps = ar.GetAllParents();
|
||||
Assert.Equal(3, ps.Count);
|
||||
|
||||
ar = ar.Parent;
|
||||
Assert.Equal("容县", ar.Name);
|
||||
|
||||
ar = ar.Parent;
|
||||
Assert.Equal("玉林", ar.Name);
|
||||
|
||||
ar = ar.Parent;
|
||||
Assert.Equal("广西", ar.Name);
|
||||
|
||||
ar = ar.Parent;
|
||||
Assert.Equal(0, ar.ID);
|
||||
Assert.Equal(Area.Root, ar);
|
||||
}
|
||||
|
||||
[TestOrder(50)]
|
||||
[Fact]
|
||||
public void ParentTest2()
|
||||
{
|
||||
var ar = Area.FindByID(310116);
|
||||
Assert.Equal("金山", ar.Name);
|
||||
|
||||
var ps = ar.GetAllParents();
|
||||
Assert.Equal(2, ps.Count);
|
||||
|
||||
ar = ar.Parent;
|
||||
Assert.Equal("市辖区", ar.Name);
|
||||
|
||||
ar = ar.Parent;
|
||||
Assert.Equal("上海", ar.Name);
|
||||
|
||||
ar = ar.Parent;
|
||||
Assert.Equal(0, ar.ID);
|
||||
Assert.Equal(Area.Root, ar);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async void Download()
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue