5.0.0.20版本需求征集 返回

之前5.0.0.19 问题 http://www.donet5.com/Ask/9/11061 基本上都修复了,有问题全部到这个贴子上回复
热忱回答(20)
-
LYL VIP0
2020/10/16动态组装查询 可否添加Db.Queryable或者子查询?
0 回复 -
fate stay night VIP0
2020/10/16@LYL:子查询肯定是不安全的不支持的,你可以先查出来然后用in去实现
conModels.Add(
new
ConditionalModel{ FieldName =
"id"
, ConditionalType = ConditionalType.In,FieldValue =
"一,二,三"
});
0 回复 -
1111111 VIP0
2020/10/21PostgreSql里面当字段类型是定长字符串时,建表没问题,查询会有问题,
字段定义:
[SugarColumn(ColumnDataType = "character", Length = 50, ColumnDescription = "这是个定长测试", IsNullable = false)] public string Test { set; get; }
查询报错:
"Message": "Requested value 'char' was not found.",
0 回复 -
fate stay night VIP0
2020/10/21@1111111:character(50)
0 回复 -
fate stay night VIP0
2020/10/21自定义类型把长度都指定好
0 回复 -
ぷ暴走丁貝羅 VIP0
2020/10/22请问下, 如果我要实现falsedelete(软删除或假删除)的功能,会用到updateable,而里面有自动更新时间的字段(mysql 的 On update CURRENT_TIMESTAMP) ,需要最终sql 是类似这样 update T as t set falseDelColumn=true , updatedAt = t.updatedAt where pk = idvalue , 目前看文档比较好实现的方案是用 db.updateable<T>(dictionary) 的方案了, 但遇到问题是 上述 updatedAt 的字段需要用到数据库本身的取值,请问下有没有解决方案啊?
0 回复 -
ぷ暴走丁貝羅 VIP0
2020/10/22@ぷ暴走丁貝羅:补充下描述: 目的是避免自动更新时间的字段,在这个时候不要自动更新时间, 因为业务上作删除(假,软)不是个更新操作 .在orm层面,是否可以加入个 SqlFunc.FieldValue("字段名") 的方式,让用户可以实现取数据库的取值呢?
0 回复 -
fate stay night VIP0
2020/10/26@ぷ暴走丁貝羅:http://www.donet5.com/Home/Doc?typeId=1195 假删除
0 回复 -
ぷ暴走丁貝羅 VIP0
2020/10/26@fate stay night:问题是我需要更新一个字段不是一个常量,不是 isDelete 的字段, 是更新时间 = 数据库原字段, 比如 需要 update set id = id +1 ,这样的 如何写 id +1 一样, 因为updatedAt 是自动更新字段,需要主动赋值才能保持其不变
0 回复 -
ぷ暴走丁貝羅 VIP0
2020/10/26还有个小bug, InsertableProvider 的 InsertColumns和IgnoreColumns只判断
DbColumnName漏了判断 PropertyName 在 updateable 是有判断的 ,如下
public IInsertable<T> InsertColumns(string[] columns)
{
// this.InsertBuilder.DbColumnInfoList = this.InsertBuilder.DbColumnInfoList.Where(it => columns.Any(ig => ig.Equals(it.PropertyName, StringComparison.CurrentCultureIgnoreCase))).ToList();
this.InsertBuilder.DbColumnInfoList = this.InsertBuilder.DbColumnInfoList
.Where(it => columns.Any(ic =>
ic.Equals(it.PropertyName, StringComparison.CurrentCultureIgnoreCase) ||
ic.Equals(it.DbColumnName, StringComparison.CurrentCultureIgnoreCase)
)
).ToList();
return this;
}
0 回复 -
静待岁月好(?▽?) VIP0
2020/10/26想要功能: 读写分离,分表分库,
0 回复 -
原装Zigzag VIP0
2020/10/26@静待岁月好(?▽?):你是不是没看文档。
0 回复 -
原装Zigzag VIP0
2020/10/26报告一个BUG,或者用法不对:
JobPlan是个有很多属性的对象,为了偷懒,这里只要求sugarsql查询某几个字段的属性。
返回的查询语句为:
SELECT * FROM (SELECT "PONO" AS "CMDNO" , "MACHINE" AS "MACHINE" , "HEAT_NO" AS "HEATNO" , "PLAN_START" AS "PLANSTART" , "PLAN_END" AS "PLANEND" , "ACT_START" AS "ACTSTART" , "ACT_END" AS "ACTEND" , "SIM_START" AS "SIMSTART" , "SIM_END" AS "SIMEND" ,ROW_NUMBER() OVER(ORDER BY "PLAN_START" DESC) AS RowIndex FROM "PL_JOB_PLAN" ) T WHERE RowIndex BETWEEN 1 AND 10
似乎没什么问题。但是从数据库映射到实体有问题,results数组里的元素,很多字段是null。
当把代码换成如下时:
结果能正确被映射:
数据库是oracle数据库。
文字版的代码如下:
var results = dbContext.Queryable<JobPlan>() .Take(10) .OrderBy(s => s.PlanStart, SqlSugar.OrderByType.Desc) .Select(s => new { CmdNo = s.CmdNo, Machine = s.Machine, HeatNo = s.HeatNo, PlanStart = s.PlanStart, PlanEnd = s.PlanEnd, ActStart = s.ActStart, ActEnd = s.ActEnd, SimStart = s.SimStart, SimEnd = s.SimEnd, }).ToList();
0 回复 -
原装Zigzag VIP0
2020/10/26@原装Zigzag:Oracle数据库,属性名与列名不完全对应,如属性PlanStart对应于列名PLAN_START。以下三种Select的方式有差异:
var results = dbContext.Queryable<JobPlan>() .Take(10) .OrderBy(s => s.PlanStart, SqlSugar.OrderByType.Desc) // 能正确得到匿名对象。 .Select(s => new { CmdNo = s.CmdNo, Machine = s.Machine, HeatNo = s.HeatNo, PlanStart = s.PlanStart, PlanEnd = s.PlanEnd, ActStart = s.ActStart, ActEnd = s.ActEnd, SimStart = s.SimStart, SimEnd = s.SimEnd, }).ToList(); // JobPlan的属性为空,当属性与数据库列名不一一对应时(这里是数据库列名是下划线)) .Select(s => new JobPlan { CmdNo = s.CmdNo, Machine = s.Machine, HeatNo = s.HeatNo, PlanStart = s.PlanStart, PlanEnd = s.PlanEnd, ActStart = s.ActStart, ActEnd = s.ActEnd, SimStart = s.SimStart, SimEnd = s.SimEnd, }).ToList(); // 完全去掉Select方法,返回全属性的JobPlan,能正确返回完整对象。 // .ToList();
0 回复 -
fate stay night VIP0
2020/10/27@ぷ暴走丁貝羅:
//实现在原有字段+1 var result= db.Updateable<Student>() .SetColumns(it => it.Num== it.Num+1) .Where(it => it.Id == 1) .ExecuteCommand();
0 回复 -
ぷ暴走丁貝羅 VIP0
2020/10/29@fate stay night://实现在原有字段+1 传进来的匿名对象或者不知道具体类型(<Student>),这种情况有办法通过字符串获取字段值吗? 比如直接或间接通过字符串 "Num + 1"
0 回复 -
ぷ暴走丁貝羅 VIP0
2020/10/29@ぷ暴走丁貝羅:就是 Updateable 缺乏字符串 表名 和 字符串 参数 的重载, 达到实现假删除更新 isDeleted = 常量 的同时 更新 Num = Num+1 的目的
0 回复 -
fate stay night VIP0
2020/10/29@ぷ暴走丁貝羅:你可以看看假删除的实现 http://www.donet5.com/Home/Doc?typeId=1195 ,更新一样同新的道理
0 回复 -
原装Zigzag VIP0
2020/12/24@fate stay night:截图中提到 Select(s=>new {}) 和 Select(s=>new SomeObject{}) 的问题依然存在,新版本还是能重现。
0 回复 -
原装Zigzag VIP0
2020/12/24@原装Zigzag:更新到最新版本,已解决,抱歉。
0 回复