## v0.9.16

- 增加 BaseRepository.AttachOnlyPrimary 方法,只附加实体的主键值;
> 在更新前使用可实现不查询数据库再更新、也可以实现更新时不更新值为 null 的字段
```csharp
class T {
    public int id { get; set; }
    public string name { get; set; }
    public string other { get; set; }
}
var item = new T { id = 1, name = "xx" };
fsql.GetRepository<T>().AttachOnlyPrimary(item).Update(item); //只更新 name
```
- 修复 Lambda 表达式中 DateTime.Now.ToString("yyyyMMdd") 不能直接执行的 bug;
This commit is contained in:
28810
2019-09-18 16:58:13 +08:00
parent 52450dc08a
commit 8d92ccd751
24 changed files with 92 additions and 24 deletions

View File

@ -162,6 +162,23 @@ namespace FreeSql
});
}
}
/// <summary>
/// 附加实体并且只附加主键值可用于不更新属性值为null或默认值的字段
/// </summary>
/// <param name="data"></param>
public DbSet<TEntity> AttachOnlyPrimary(TEntity data)
{
if (data == null) return this;
var pkitem = (TEntity)Activator.CreateInstance(_entityType);
foreach (var pk in _db.Orm.CodeFirst.GetTableByEntity(_entityType).Primarys)
{
var colVal = _db.Orm.GetEntityValueWithPropertyName(_entityType, data, pk.CsName);
_db.Orm.SetEntityValueWithPropertyName(_entityType, pkitem, pk.CsName, colVal);
}
this.Attach(pkitem);
return this;
}
/// <summary>
/// 清空状态数据
/// </summary>