好像发现了一个更新的bug,请验证 返回

C#论坛 老数据
4 2903
该叫什么 ..A.. 发布于2018/9/20
悬赏:5 飞吻

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.. ..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.. ..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 回复
  • 这个不是BUG whereColumns 需要你传 db.Updateable<T>(实体对象).

    0 回复
  • 不然我WHERECOLUMNS值是多少呢 我怎么给你生成条件

    0 回复