字典参数LongValue字段,改为大文本字段,无限长度,便于下游存储更大内容

This commit is contained in:
大石头 2024-07-14 13:44:46 +08:00
parent aecc97f73a
commit 96b43e6a62
13 changed files with 96 additions and 30 deletions

3
Doc/publish_tool.bat Normal file
View File

@ -0,0 +1,3 @@
pushd ..\XCodeTool
dotnet publish -f net8.0 -r win-x64 -c Release --self-contained true /p:PublishSingleFile=true /p:EnableCompressionInSingleFile=true
popd

View File

@ -82,6 +82,7 @@
<Index Columns="Mobile" />
<Index Columns="Code" />
<Index Columns="RoleID" />
<Index Columns="DepartmentID" />
<Index Columns="UpdateTime" />
</Indexes>
</Table>
@ -115,11 +116,11 @@
<Column Name="Remark" DataType="String" Length="500" Description="备注" Category="扩展" />
</Columns>
<Indexes>
<Index Columns="TenantId,ParentID,Name" Unique="True" />
<Index Columns="Name" />
<Index Columns="ParentID,Name" />
<Index Columns="Code" />
<Index Columns="UpdateTime" />
<Index Columns="TenantId" />
</Indexes>
</Table>
<Table Name="Role" Description="角色。业务场景中的岗位,功能权限的集合。不管是用户还是租户,都以角色来管理权限">
@ -181,8 +182,8 @@
<Column Name="Remark" DataType="String" Length="500" Description="备注" Category="扩展" />
</Columns>
<Indexes>
<Index Columns="Name" />
<Index Columns="ParentID,Name" Unique="True" />
<Index Columns="Name" />
</Indexes>
</Table>
<Table Name="Parameter" Description="字典参数。管理用户或系统全局的名值对数据,常用于参数配置场合" UsingCache="False">
@ -192,7 +193,7 @@
<Column Name="Category" DataType="String" Description="类别" />
<Column Name="Name" DataType="String" Master="True" Nullable="False" Description="名称" />
<Column Name="Value" DataType="String" Length="200" Description="数值" />
<Column Name="LongValue" DataType="String" Length="2000" Description="长数值" />
<Column Name="LongValue" DataType="String" Length="-1" Description="长数值" />
<Column Name="Kind" DataType="Int32" Description="种类。0普通21列表22名值" Type="XCode.Membership.ParameterKinds" />
<Column Name="Enable" DataType="Boolean" Description="启用" />
<Column Name="Ex1" DataType="Int32" Description="扩展1" Category="扩展" />

View File

@ -1364,7 +1364,7 @@
<td>LongValue</td>
<td>长数值</td>
<td>String</td>
<td>2000</td>
<td></td>
<td></td>
<td></td>
<td></td>

Binary file not shown.

View File

@ -68,7 +68,7 @@ public partial class Parameter : IParameter, IEntity<ParameterModel>
/// <summary>长数值</summary>
[DisplayName("长数值")]
[Description("长数值")]
[DataObjectField(false, false, true, 2000)]
[DataObjectField(false, false, true, -1)]
[BindColumn("LongValue", "长数值", "")]
public String? LongValue { get => _LongValue; set { if (OnPropertyChanging("LongValue", value)) { _LongValue = value; OnPropertyChanged("LongValue"); } } }
@ -333,6 +333,17 @@ public partial class Parameter : IParameter, IEntity<ParameterModel>
#endregion
#region
/// <summary>根据用户、类别查找</summary>
/// <param name="userId">用户</param>
/// <param name="category">类别</param>
/// <returns>实体列表</returns>
public static IList<Parameter> FindAllByUserIDAndCategory(Int32 userId, String category)
{
if (userId < 0) return [];
if (category == null) return [];
return FindAll(_.UserID == userId & _.Category == category);
}
#endregion
#region

View File

@ -22,6 +22,7 @@ namespace XCode.Membership;
[BindIndex("IX_User_Mobile", false, "Mobile")]
[BindIndex("IX_User_Code", false, "Code")]
[BindIndex("IX_User_RoleID", false, "RoleID")]
[BindIndex("IX_User_DepartmentID", false, "DepartmentID")]
[BindIndex("IX_User_UpdateTime", false, "UpdateTime")]
[BindTable("User", Description = "用户。用户帐号信息,以身份验证为中心,拥有多种角色,可加入多个租户", ConnName = "Membership", DbType = DatabaseType.None)]
public partial class User : IUser, IEntity<UserModel>
@ -479,6 +480,18 @@ public partial class User : IUser, IEntity<UserModel>
#endregion
#region
/// <summary>根据部门查找</summary>
/// <param name="departmentId">部门</param>
/// <returns>实体列表</returns>
public static IList<User> FindAllByDepartmentID(Int32 departmentId)
{
if (departmentId < 0) return [];
// 实体缓存
if (Meta.Session.Count < 1000) return Meta.Cache.FindAll(e => e.DepartmentID == departmentId);
return FindAll(_.DepartmentID == departmentId);
}
#endregion
#region

View File

@ -17,8 +17,8 @@ namespace XCode.Membership;
[Serializable]
[DataObject]
[Description("菜单。功能权限,大多数时候也是可见页面")]
[BindIndex("IX_Menu_Name", false, "Name")]
[BindIndex("IU_Menu_ParentID_Name", true, "ParentID,Name")]
[BindIndex("IX_Menu_Name", false, "Name")]
[BindTable("Menu", Description = "菜单。功能权限,大多数时候也是可见页面", ConnName = "Membership", DbType = DatabaseType.None)]
public partial class Menu : IMenu, IEntity<MenuModel>
{

View File

@ -17,11 +17,11 @@ namespace XCode.Membership;
[Serializable]
[DataObject]
[Description("部门。组织机构,多级树状结构,支持多租户")]
[BindIndex("IU_Department_TenantId_ParentID_Name", true, "TenantId,ParentID,Name")]
[BindIndex("IX_Department_Name", false, "Name")]
[BindIndex("IX_Department_ParentID_Name", false, "ParentID,Name")]
[BindIndex("IX_Department_Code", false, "Code")]
[BindIndex("IX_Department_UpdateTime", false, "UpdateTime")]
[BindIndex("IX_Department_TenantId", false, "TenantId")]
[BindTable("Department", Description = "部门。组织机构,多级树状结构,支持多租户", ConnName = "Membership", DbType = DatabaseType.None)]
public partial class Department : IDepartment, IEntity<DepartmentModel>
{
@ -376,6 +376,37 @@ public partial class Department : IDepartment, IEntity<DepartmentModel>
#endregion
#region
/// <summary>根据租户、父级、名称查找</summary>
/// <param name="tenantId">租户</param>
/// <param name="parentId">父级</param>
/// <param name="name">名称</param>
/// <returns>实体对象</returns>
public static Department? FindByTenantIdAndParentIDAndName(Int32 tenantId, Int32 parentId, String name)
{
if (tenantId < 0) return null;
if (parentId < 0) return null;
if (name == null) return null;
// 实体缓存
if (Meta.Session.Count < 1000) return Meta.Cache.Find(e => e.TenantId == tenantId && e.ParentID == parentId && e.Name.EqualIgnoreCase(name));
return Find(_.TenantId == tenantId & _.ParentID == parentId & _.Name == name);
}
/// <summary>根据租户、父级查找</summary>
/// <param name="tenantId">租户</param>
/// <param name="parentId">父级</param>
/// <returns>实体列表</returns>
public static IList<Department> FindAllByTenantIdAndParentID(Int32 tenantId, Int32 parentId)
{
if (tenantId < 0) return [];
if (parentId < 0) return [];
// 实体缓存
if (Meta.Session.Count < 1000) return Meta.Cache.FindAll(e => e.TenantId == tenantId && e.ParentID == parentId);
return FindAll(_.TenantId == tenantId & _.ParentID == parentId);
}
#endregion
#region

View File

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<EntityModel xmlns:xs="http://www.w3.org/2001/XMLSchema-instance" xs:schemaLocation="https://newlifex.com https://newlifex.com/Model202309.xsd" Document="https://newlifex.com/xcode/model" xmlns="https://newlifex.com/Model202309.xsd">
<EntityModel xmlns:xs="http://www.w3.org/2001/XMLSchema-instance" xs:schemaLocation="https://newlifex.com https://newlifex.com/Model202407.xsd" Document="https://newlifex.com/xcode/model" xmlns="https://newlifex.com/Model202407.xsd">
<Option>
<!--类名模板。其中{name}替换为Table.Name如{name}Model/I{name}Dto等-->
<ClassNameTemplate />
@ -82,6 +82,7 @@
<Index Columns="Mobile" />
<Index Columns="Code" />
<Index Columns="RoleID" />
<Index Columns="DepartmentID" />
<Index Columns="UpdateTime" />
</Indexes>
</Table>
@ -115,11 +116,11 @@
<Column Name="Remark" DataType="String" Length="500" Description="备注" Category="扩展" />
</Columns>
<Indexes>
<Index Columns="TenantId,ParentID,Name" Unique="True" />
<Index Columns="Name" />
<Index Columns="ParentID,Name" />
<Index Columns="Code" />
<Index Columns="UpdateTime" />
<Index Columns="TenantId" />
</Indexes>
</Table>
<Table Name="Role" Description="角色。业务场景中的岗位,功能权限的集合。不管是用户还是租户,都以角色来管理权限">
@ -181,18 +182,18 @@
<Column Name="Remark" DataType="String" Length="500" Description="备注" Category="扩展" />
</Columns>
<Indexes>
<Index Columns="Name" />
<Index Columns="ParentID,Name" Unique="True" />
<Index Columns="Name" />
</Indexes>
</Table>
<Table Name="Parameter" Description="字典参数。管理用户或系统全局的名值对数据,常用于参数配置场合">
<Table Name="Parameter" Description="字典参数。管理用户或系统全局的名值对数据,常用于参数配置场合" UsingCache="False">
<Columns>
<Column Name="ID" DataType="Int32" Identity="True" PrimaryKey="True" Description="编号" />
<Column Name="UserID" DataType="Int32" Map="User@Id@$" Description="用户。按用户区分参数用户0表示系统级" />
<Column Name="Category" DataType="String" Description="类别" />
<Column Name="Name" DataType="String" Master="True" Description="名称" />
<Column Name="Name" DataType="String" Master="True" Nullable="False" Description="名称" />
<Column Name="Value" DataType="String" Length="200" Description="数值" />
<Column Name="LongValue" DataType="String" Length="2000" Description="长数值" />
<Column Name="LongValue" DataType="String" Length="-1" Description="长数值" />
<Column Name="Kind" DataType="Int32" Description="种类。0普通21列表22名值" Type="XCode.Membership.ParameterKinds" />
<Column Name="Enable" DataType="Boolean" Description="启用" />
<Column Name="Ex1" DataType="Int32" Description="扩展1" Category="扩展" />
@ -220,7 +221,7 @@
<Table Name="Area" Description="地区。行政区划数据最高支持四级地址9位数字">
<Columns>
<Column Name="ID" DataType="Int32" PrimaryKey="True" Description="编码。行政区划编码" />
<Column Name="Name" DataType="String" Master="True" Description="名称" />
<Column Name="Name" DataType="String" Master="True" Nullable="False" Description="名称" />
<Column Name="FullName" DataType="String" Master="True" Description="全名" />
<Column Name="ParentID" DataType="Int32" Description="父级" />
<Column Name="Level" DataType="Int32" Description="层级" />
@ -249,9 +250,9 @@
</Table>
<Table Name="Log" Description="日志。应用系统审计日志,记录用户的各种操作,禁止修改和删除" ConnName="Log" InsertOnly="True">
<Columns>
<Column Name="ID" DataType="Int64" PrimaryKey="True" Description="编号" />
<Column Name="ID" DataType="Int64" PrimaryKey="True" DataScale="time" Description="编号" />
<Column Name="Category" DataType="String" Description="类别" />
<Column Name="Action" DataType="String" Description="操作" />
<Column Name="Action" DataType="String" Nullable="False" Description="操作" />
<Column Name="LinkID" DataType="Int64" Description="链接" />
<Column Name="Success" DataType="Boolean" Description="成功" />
<Column Name="UserName" DataType="String" Description="用户名" />
@ -278,7 +279,7 @@
<Columns>
<Column Name="Id" DataType="Int32" Identity="True" PrimaryKey="True" Description="编号" />
<Column Name="Code" DataType="String" Description="编码。唯一编码" />
<Column Name="Name" DataType="String" Master="True" Description="名称。显示名称" />
<Column Name="Name" DataType="String" Master="True" Nullable="False" Description="名称。显示名称" />
<Column Name="Enable" DataType="Boolean" Description="启用" />
<Column Name="ManagerId" DataType="Int32" Map="User@Id@$" Description="管理者" />
<Column Name="RoleIds" DataType="String" Length="200" Description="角色组。租户可选的角色集合,不同级别的租户所拥有的角色不一样,高级功能也会不同" />

View File

@ -98,9 +98,6 @@
</ItemGroup>
<ItemGroup>
<None Remove="Build.tt" />
<None Remove="install.ps1" />
<None Remove="Readme.MD" />
<None Remove="UpdateInfo.txt" />
</ItemGroup>
<ItemGroup>
<Content Include="..\Doc\leaf.png" Link="leaf.png" PackagePath="\" />
@ -111,8 +108,4 @@
<PackagePath>\</PackagePath>
</None>
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="Readme.MD" />
<EmbeddedResource Include="UpdateInfo.txt" />
</ItemGroup>
</Project>

View File

@ -17,6 +17,6 @@ public class EntityTests
};
//user.Insert();
var ex = Assert.Throws<ArgumentOutOfRangeException>(() => user.Insert());
Assert.EndsWith("[Name=StoneXXX]", ex.Message);
Assert.Contains("[Name=StoneXXX]", ex.Message);
}
}

View File

@ -50,7 +50,7 @@ public class UserTests
var user = new User { Name = Rand.NextString(64) };
var ex = Assert.Throws<ArgumentOutOfRangeException>(() => user.Insert());
Assert.Equal("Name", ex.ParamName);
Assert.Equal("名称长度限制50字符 (Parameter 'Name')", ex.Message);
Assert.Equal("[Name/名称]长度限制50字符[ID=0] (Parameter 'Name')", ex.Message);
}
[Fact]

View File

@ -1,4 +1,4 @@
using System;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Runtime.Serialization;
@ -233,10 +233,10 @@ public partial class CorePerson
/// <param name="pname">姓名</param>
/// <param name="creditNo">身份证号</param>
/// <returns>实体对象</returns>
public static CorePerson FindByPnameAndCreditNo(String pname, String creditNo)
public static CorePerson? FindByPnameAndCreditNo(String pname, String creditNo)
{
if (pname.IsNullOrEmpty()) return null;
if (creditNo.IsNullOrEmpty()) return null;
if (pname == null) return null;
if (creditNo == null) return null;
// 实体缓存
if (Meta.Session.Count < 1000) return Meta.Cache.Find(e => e.Pname.EqualIgnoreCase(pname) && e.CreditNo.EqualIgnoreCase(creditNo));
@ -244,6 +244,19 @@ public partial class CorePerson
return Find(_.Pname == pname & _.CreditNo == creditNo);
}
/// <summary>根据姓名查找</summary>
/// <param name="pname">姓名</param>
/// <returns>实体列表</returns>
public static IList<CorePerson> FindAllByPname(String pname)
{
if (pname == null) return [];
// 实体缓存
if (Meta.Session.Count < 1000) return Meta.Cache.FindAll(e => e.Pname.EqualIgnoreCase(pname));
return FindAll(_.Pname == pname);
}
/// <summary>根据楼宇ID查找</summary>
/// <param name="buildId">楼宇ID</param>
/// <returns>实体列表</returns>