SkyChenSky/Sikiro.Dapper.Extension

根据主键修改数据无效

zhouxin93 opened this issue · 16 comments

当不写where条件。直接update应该是根据主键来修改数据库。但是这种情况下数据库的所有数据都被修改了。

主键加了Key的特性标签没?

增加了

好,我检查下看看,修复了告诉你

Thank you

目前因为根据主键修改数据不行。我使用 Where(a.id=>a.id==model.id) 。这样也会有一个问题。第一次是OK的。第二次再次调用这一句修改的还是上一个id的。这是哪里做了缓存没有清理掉么。

刚刚第一个问题我修复,已提交了,这个问题我现在看看

OK。辛苦了

我这里测试了没问题,不知道是不是你的model.id没有修改到?才会导致修改了同一条数据

之前刚那个Update的问题的确是我没测试到的场景,我的疏忽,非常抱歉。也非常感谢你的积极反馈,很有价值

修改到了。每次都会拿到新的id。你使用不同的条件查询出来不同的记录。然后再去修改它看看

方便发你那段代码看看不,我现在需求评审,不方便调试

var item = await shareLogRepository.GetItem(userid, model.postsid);
`var list = item.ShareTo.SplitToList(',');
if (model.shareto.Length > 0 && !list.Contains(model.shareto))
{
list.Add(model.shareto);
item.ShareTo = string.Join(",", list);

				isFlag = await shareLogRepository.UpDateAsync(item);
			}`

public async Task<bool> UpDateAsync(ShareLog model) { using (var conn = db.GetDbConn(dbKey.BBS)) { var res = (await conn.CommandSet<ShareLog>().Where(a => a.Id == model.Id).UpdateAsync(model)) > 0; return res; } }

这传上来格式有点乱。就是正常的根据条件查询一条数据。修改数据然后更新到数据库

另外建议数据库操作增加异步的封装。NetCore 在Linux 异步性能更高点。

找到你刚刚说的缓存问题了,的确在TrimExpression里调用的时候MemberToValue,想把委托存到内存提高效率,但是却引起了解析出的value一致的问题。我暂时把缓存屏蔽了修复一下,迟点再优化这块。谢谢反馈

好的。