好像发现了一个更新的bug,请验证 返回
var sql = db.Updateable<T>().UpdateColumns(x => x.f1== 1).WhereColumns(x => x.f2).ToSql();
调试发现 sql 中缺少 f2 字段的参数信息。
var sql = db.Updateable<T>().WhereColumns(x => x.f2).UpdateColumns(x => x.f1== 1).ToSql();
生成的语句和上面不一致。但仍然缺少 f2 字段的参数信息。
请验证,谢谢。
热忱回答(4)
-
..A.. VIP0
2018/9/21先拜谢凯旋兄的ORM框架。
此问题已自行使用笨方法解决。 期待凯旋兄的完美解决并更新,方便下次直接NuGet使用。看文档园里好几个兄弟都遇到了因为 WhereColumns 导致更新失败的问题,先附上自行解决的办法:
1. 先找到自己对应的工程,卸载从NuGet安装的 SqlSugar 引用;
2. 自行从凯旋兄说明文档里找到对应的GitHub源码地址,并下载;
3. 在下载包中找到 SqlSugar 工程并复制到自己的解决方案目录下,并在解决方案里面添加进来;
4. 在自己的工程中添加引用本地的 SqlSugar 工程;
5. 修改两个代码文件:
a> SqlSugar/Abstract/SqlBuilderProvider/UpdateBuilder.cs
在 DbColumnInfoList 属性上面,添加:
public List<DbColumnInfo> ColumnList { get; set; } = new List<DbColumnInfo>();
b> SqlSugar/Abstract/UpdateProvider/UpdateableProvider.cs
>在函数 SetUpdateItemByDic 和 SetUpdateItemByEntity 的底部添加:
this.UpdateBuilder.ColumnList.AddRange(updateItem);
>在函数 PreToSql 的 #region Identities 这一行上面添加:
foreach (var item in this.WhereColumnList)
{
var columnInfo = this.UpdateBuilder.ColumnList.FirstOrDefault(it => this.WhereColumnList.Any(uc => uc.Equals(it.PropertyName, StringComparison.CurrentCultureIgnoreCase) || uc.Equals(it.DbColumnName, StringComparison.CurrentCultureIgnoreCase)) || it.IsPrimarykey || it.IsIdentity);
if (columnInfo != null)
this.UpdateBuilder.Parameters.Add(new SugarParameter(this.SqlBuilder.SqlParameterKeyWord + item, columnInfo.Value, columnInfo.PropertyType));
}
6. End.0 回复 -
..A.. VIP0
2018/9/21更正下:
foreach (var item in this.WhereColumnList)
{
var columnInfo = this.UpdateBuilder.ColumnList.FirstOrDefault(it => item.Equals(it.PropertyName, StringComparison.CurrentCultureIgnoreCase) || item.Equals(it.DbColumnName, StringComparison.CurrentCultureIgnoreCase));
if(columnInfo != null && !this.UpdateBuilder.Parameters.Any(x => x.ParameterName == this.SqlBuilder.SqlParameterKeyWord + item))
this.UpdateBuilder.Parameters.Add(new SugarParameter(this.SqlBuilder.SqlParameterKeyWord + item, columnInfo.Value, columnInfo.PropertyType));
}
0 回复 -
fate stay night VIP0
2018/10/10这个不是BUG whereColumns 需要你传 db.Updateable<T>(实体对象).
0 回复 -
fate stay night VIP0
2018/10/10不然我WHERECOLUMNS值是多少呢 我怎么给你生成条件
0 回复