dotnetcore / FreeSql

🦄 .NET aot orm, C# orm, VB.NET orm, Mysql orm, Postgresql orm, SqlServer orm, Oracle orm, Sqlite orm, Firebird orm, 达梦 orm, 人大金仓 orm, 神通 orm, 翰高 orm, 南大通用 orm, 虚谷 orm, 国产 orm, Clickhouse orm, QuestDB orm, MsAccess orm.
http://freesql.net
MIT License
4.08k stars 848 forks source link

更新失败,没报错 但是更新后数据依然是旧的 #1856

Open ClementeGao opened 2 months ago

ClementeGao commented 2 months ago

问题描述及重现代码:

当执行完以下代码后,数据库的数据没更新,也没报错

var entitis = await _freeSql.Select<PositionGreetingConfigDo>();
var updateCofigs = new List<PositionGreetingConfigDo>();
var configEntity = entitis.First(x => x.positionGreetingConfigId == item.positionGreetingConfigId);
 configEntity.greetCount = item.greetingCount;
 configEntity.triggerTime = item.triggerTime;
updateCofigs.Add(configEntity);
using (var unitOfWork = _freeSql.CreateUnitOfWork())
{
var repo = unitOfWork.GetRepository<PositionGreetingConfigDo>();
//更新
if (updateCofigs.Any())
{
    repo.Attach(updateCofigs);
    var r = repo.Update(updateCofigs);
      unitOfWork.Commit();
}
}

数据库版本

sqlserver 12

安装的Nuget包

FreeSql 3.2.832

.net framework/. net core? 及具体版本

.netcore3.1

2881099 commented 2 months ago

repo.Attach 不是这样用的,repo查询出来的记录,才适合用 repo.Update

如果记录来自是json,可以用 repo.Where(a=> items.Any(i => i.Id == a.Id)).ToList()

再 repo.Update(items),建议看文档了解仓储的机制。

也可以直接 repo.UpdateDiy.SetSource(items).ExecuteAffrows() 更新所有字段,这个API对应 fsql.Update修改文档。