- 修复 preview20251217 bug;

This commit is contained in:
2881099
2025-12-18 21:30:56 +08:00
parent 0b736392f4
commit 27c0531119
3 changed files with 112 additions and 128 deletions

View File

@@ -564,13 +564,13 @@ namespace base_entity
#region IFreeSql
var fsql = new FreeSql.FreeSqlBuilder()
//.UseAutoSyncStructure(true)
.UseAutoSyncStructure(true)
.UseNoneCommandParameter(true)
//.UseNameConvert(NameConvertType.ToLower)
.UseMappingPriority(MappingPriorityType.Attribute, MappingPriorityType.FluentApi, MappingPriorityType.Aop)
.UseAdoConnectionPool(true)
//.UseAdoConnectionPool(true)
.UseConnectionString(FreeSql.DataType.Sqlite, "data source=123.db")
.UseConnectionString(FreeSql.DataType.Sqlite, "data source=:memory:")
//.UseConnectionString(DataType.Sqlite, "data source=db1.db;attachs=db2.db")
//.UseSlave("data source=test1.db", "data source=test2.db", "data source=test3.db", "data source=test4.db")
//.UseSlaveWeight(10, 1, 1, 5)
@@ -579,7 +579,7 @@ namespace base_entity
//.UseConnectionString(FreeSql.DataType.Firebird, @"database=localhost:D:\fbdata\EXAMPLES.fdb;user=sysdba;password=123456;max pool size=5")
//.UseQuoteSqlName(false)
.UseConnectionString(FreeSql.DataType.MySql, "Data Source=127.0.0.1;Port=3306;User ID=root;Password=root;Initial Catalog=cccddd;Charset=utf8;SslMode=none;min pool size=1;Max pool size=3;AllowLoadLocalInfile=true")
//.UseConnectionString(FreeSql.DataType.MySql, "Data Source=127.0.0.1;Port=3306;User ID=root;Password=root;Initial Catalog=cccddd;Charset=utf8;SslMode=none;min pool size=1;Max pool size=3;AllowLoadLocalInfile=true")
//.UseConnectionString(FreeSql.DataType.SqlServer, "Data Source=.;Integrated Security=True;Initial Catalog=freesqlTest;Pooling=true;Max Pool Size=3;TrustServerCertificate=true")
//.UseAdoConnectionPool(false)
@@ -621,6 +621,63 @@ namespace base_entity
BaseEntity.Initialization(fsql, () => _asyncUow.Value);
#endregion
Console.WriteLine("--- 正在初始化测试数据 ---");
// 插入班级
var class1Id = (int)fsql.Insert(new ClassesEntity { ClassesName = "高三一班" }).ExecuteIdentity();
var class2Id = (int)fsql.Insert(new ClassesEntity { ClassesName = "高三二班" }).ExecuteIdentity();
// 插入小组信息
var groupId1 = (int)fsql.Insert(new BizDingGroupEntity { GroupCode = "G001", GroupName = "数学竞赛组" }).ExecuteIdentity();
var groupId2 = (int)fsql.Insert(new BizDingGroupEntity { GroupCode = "G002", GroupName = "英语角" }).ExecuteIdentity();
var groupId3 = (int)fsql.Insert(new BizDingGroupEntity { GroupCode = "G003", GroupName = "物理实验组" }).ExecuteIdentity();
// 插入学生
var s1Id = (int)fsql.Insert(new StudentEntity { Name = "张三", ClassId = class1Id, CreatedTime = DateTime.Now }).ExecuteIdentity();
var s2Id = (int)fsql.Insert(new StudentEntity { Name = "李四", ClassId = class1Id, CreatedTime = DateTime.Now.AddDays(-1) }).ExecuteIdentity();
var s3Id = (int)fsql.Insert(new StudentEntity { Name = "王五", ClassId = class2Id, CreatedTime = DateTime.Now.AddMinutes(-10) }).ExecuteIdentity();
// 插入学生与小组的关联 (BizStudentGroupEntity)
fsql.Insert(new List<BizStudentGroupEntity> {
new BizStudentGroupEntity { StudentId = s1Id, GroupId = groupId1 }, // 张三 - 数学
new BizStudentGroupEntity { StudentId = s1Id, GroupId = groupId2 }, // 张三 - 英语
new BizStudentGroupEntity { StudentId = s2Id, GroupId = groupId1 }, // 李四 - 数学
new BizStudentGroupEntity { StudentId = s3Id, GroupId = groupId3 } // 王五 - 物理
}).ExecuteAffrows();
var _studentRepository = fsql.GetRepository<StudentEntity>();
var _filter = new FilterDto { SchoolClassGroupCode = "G001" };
var input = new { CurrentPage = 1, PageSize = 10 };
// 2. 模拟图片中的查询逻辑
var listxx2 = fsql.Select<StudentEntity, ClassesEntity>()
.LeftJoin((a, b) => a.ClassId == b.Id)
.OrderByDescending((a, b) => a.CreatedTime)
.Count(out var totalxx2)
.Page(input.CurrentPage, input.PageSize)
.ToList((a, b) => new StudentGetPageOutput
{
ClassName = b.ClassesName,
SchoolClassGroups = fsql.Select<BizStudentGroupEntity, BizDingGroupEntity>()
.LeftJoin((f, g) => f.GroupId == g.Id && f.StudentId == a.Id)
.WhereIf(!string.IsNullOrEmpty(_filter.SchoolClassGroupCode),
(f, g) => g.GroupCode == _filter.SchoolClassGroupCode)
.ToList((f, g) => new IdNameDto
{
Id = g.Id,
Name = g.GroupName
})
});
Console.WriteLine($"\n查询完成总学生数: {totalxx2}");
foreach (var item in listxx2)
{
var groups = item.SchoolClassGroups != null
? string.Join(", ", item.SchoolClassGroups.Select(x => x.Name))
: "无";
Console.WriteLine($"班级: {item.ClassName} | 关联小组: {groups}");
}
var orderStatusValue = Order1.OrderStatus.Cancelled;
fsql.Select<Order1>().Where(a => a.status == Order1.OrderStatus.Completed).InsertInto(null, a => new Order1
{
@@ -3735,4 +3792,54 @@ public partial class platactioninuser
[JsonProperty]
public int? PlatStatus { get; set; }
}
public class StudentEntity
{
[Column(IsIdentity = true)] public int Id { get; set; }
public string Name { get; set; }
public int ClassId { get; set; }
public DateTime CreatedTime { get; set; }
}
public class ClassesEntity
{
[Column(IsIdentity = true)] public int Id { get; set; }
public string ClassesName { get; set; }
}
// 关联表:学生与小组
public class BizStudentGroupEntity
{
[Column(IsIdentity = true)] public int Id { get; set; }
public int StudentId { get; set; }
public int GroupId { get; set; }
}
// 小组信息表
public class BizDingGroupEntity
{
[Column(IsIdentity = true)] public int Id { get; set; }
public string GroupCode { get; set; }
public string GroupName { get; set; }
}
// --- DTO 输出类 ---
public class StudentGetPageOutput
{
public string ClassName { get; set; }
public List<IdNameDto> SchoolClassGroups { get; set; }
}
public class IdNameDto
{
public int Id { get; set; }
public string Name { get; set; }
}
// 模拟过滤器
public class FilterDto
{
public string SchoolClassGroupCode { get; set; }
}

View File

@@ -6529,126 +6529,3 @@
</member>
</members>
</doc>
<returns></returns>
</member>
<member name="M:IFreeSql.Insert``1(System.Collections.Generic.List{``0})">
<summary>
插入数据,传入实体集合
</summary>
<typeparam name="T1"></typeparam>
<param name="source"></param>
<returns></returns>
</member>
<member name="M:IFreeSql.Insert``1(System.Collections.Generic.IEnumerable{``0})">
<summary>
插入数据,传入实体集合
</summary>
<typeparam name="T1"></typeparam>
<param name="source"></param>
<returns></returns>
</member>
<member name="M:IFreeSql.InsertOrUpdate``1">
<summary>
插入或更新数据,此功能依赖数据库特性(低版本可能不支持),参考如下:<para></para>
MySql 5.6+: on duplicate key update<para></para>
PostgreSQL 9.4+: on conflict do update<para></para>
SqlServer 2008+: merge into<para></para>
Oracle 11+: merge into<para></para>
Sqlite: replace into<para></para>
DuckDB: on conflict do update<para></para>
达梦: merge into<para></para>
人大金仓on conflict do update<para></para>
神通merge into<para></para>
MsAccess不支持<para></para>
注意区别FreeSql.Repository 仓储也有 InsertOrUpdate 方法(不依赖数据库特性)
</summary>
<typeparam name="T1"></typeparam>
<returns></returns>
</member>
<member name="M:IFreeSql.Update``1">
<summary>
修改数据
</summary>
<typeparam name="T1"></typeparam>
<returns></returns>
</member>
<member name="M:IFreeSql.Update``1(System.Object)">
<summary>
修改数据,传入动态条件,如:主键值 | new[]{主键值1,主键值2} | TEntity1 | new[]{TEntity1,TEntity2} | new{id=1}
</summary>
<typeparam name="T1"></typeparam>
<param name="dywhere">主键值、主键值集合、实体、实体集合、匿名对象、匿名对象集合</param>
<returns></returns>
</member>
<member name="M:IFreeSql.Select``1">
<summary>
查询数据
</summary>
<typeparam name="T1"></typeparam>
<returns></returns>
</member>
<member name="M:IFreeSql.Select``1(System.Object)">
<summary>
查询数据,传入动态条件,如:主键值 | new[]{主键值1,主键值2} | TEntity1 | new[]{TEntity1,TEntity2} | new{id=1}
</summary>
<typeparam name="T1"></typeparam>
<param name="dywhere">主键值、主键值集合、实体、实体集合、匿名对象、匿名对象集合</param>
<returns></returns>
</member>
<member name="M:IFreeSql.Delete``1">
<summary>
删除数据
</summary>
<typeparam name="T1"></typeparam>
<returns></returns>
</member>
<member name="M:IFreeSql.Delete``1(System.Object)">
<summary>
删除数据,传入动态条件,如:主键值 | new[]{主键值1,主键值2} | TEntity1 | new[]{TEntity1,TEntity2} | new{id=1}
</summary>
<typeparam name="T1"></typeparam>
<param name="dywhere">主键值、主键值集合、实体、实体集合、匿名对象、匿名对象集合</param>
<returns></returns>
</member>
<member name="M:IFreeSql.Transaction(System.Action)">
<summary>
开启事务(不支持异步)<para></para>
v1.5.0 关闭了线程事务超时自动提交的机制
</summary>
<param name="handler">事务体 () => {}</param>
</member>
<member name="M:IFreeSql.Transaction(System.Data.IsolationLevel,System.Action)">
<summary>
开启事务(不支持异步)<para></para>
v1.5.0 关闭了线程事务超时自动提交的机制
</summary>
<param name="isolationLevel"></param>
<param name="handler">事务体 () => {}</param>
</member>
<member name="P:IFreeSql.Ado">
<summary>
数据库访问对象
</summary>
</member>
<member name="P:IFreeSql.Aop">
<summary>
所有拦截方法都在这里
</summary>
</member>
<member name="P:IFreeSql.CodeFirst">
<summary>
CodeFirst 模式开发相关方法
</summary>
</member>
<member name="P:IFreeSql.DbFirst">
<summary>
DbFirst 模式开发相关方法
</summary>
</member>
<member name="P:IFreeSql.GlobalFilter">
<summary>
全局过滤设置,可默认附加为 Select/Update/Delete 条件
</summary>
</member>
</members>
</doc>

View File

@@ -482,7 +482,7 @@ namespace FreeSql.Internal
break;
}
var mapType = initExpArg.Type;
if (dtoTable?.ColumnsByCs.TryGetValue(initExp.Bindings[a].Member.Name, out var dtoCol) != null &&
if (dtoTable?.ColumnsByCs.TryGetValue(initExp.Bindings[a].Member.Name, out var dtoCol) == true &&
dtoCol.Attribute.IsIgnore != true)
mapType = dtoCol.Attribute.MapType;
var child = new ReadAnonymousTypeInfo