DotNetNext / SqlSugar

.Net aot ORM Fastest ORM Simple Easy VB.NET Sqlite orm Oracle ORM Mysql Orm 虚谷数据库 postgresql ORm SqlServer oRm 达梦 ORM 人大金仓 ORM 神通ORM C# ORM , C# ORM .NET ORM NET5 ORM .NET6 ORM ClickHouse orm QuestDb ,TDengine ORM,OceanBase orm,GaussDB orm ,Tidb orm Object/Relational Mapping
https://www.donet5.com/Home/Doc
MIT License
5.24k stars 1.33k forks source link

为什么dbquery对象在未赋值的情况下会被修改 #1144

Closed HZ-GeLiang closed 1 year ago

HZ-GeLiang commented 1 year ago

我按照文档代码的 Scope模式:SqlSugarClient 模式, 进行了一个单表查询. 然而我发现, query对象不能复用. 下面2个{} 中的代码是一模一样的

Nuget版本: <PackageReference Include="sqlSugarCore" Version="5.1.4.63" />

运行代码(源码粘贴上来显示有问题, 粘贴图片了)

image

然后控制器就输出了如下2个sql语句.

SELECT [Id],[UserName],[Birth] FROM [Students] WHERE ( [Id] = @Id0 )

SELECT [Id],[UserName],[Birth] FROM [Students] WHERE ( [Id] = @Id0 ) AND ( [Id] = @Id1 )

根据认知, query.Where(exp) 返回一个 queryable 对象, 上面代码中我没有把 query.where(exp)的 query对象重复赋值给 query, 那么理论上最后的输出的2个sql语句应该是一致的才对.

DotNetNext commented 1 year ago

queryable.Clone(),这样操作可以拷贝一个新对象 ,不然是引用类型,看文档queryable生命周期