C#-ServiceStack ORMLite UpdateOnly故障
作者:互联网
我有一个具有属性LastLoggedIn的对象User,以下是我编写的用于更新此字段的代码:
using (var o = Conn.OpenDbConnection()) {
var onlyFields = (x => x.LastLoggedIn);
var where = (x => x.Id == item.Id);
return o.UpdateOnly(item, onlyFields, where);
}
我使用SQL Server Profiler捕获输出语句,并且得到:
UPDATE "Users" SET "LastLoggedIn" = '20131228 11:39:31.441' WHERE ("Id" = "Id")
(Debug SQL Profiler的屏幕截图)
注意SQL Profiler说“ Id” =“ Id”吗?确实应该是“ Id” =“ iNa7EKWjKkKMu …”.我做错了什么?谢谢你的帮助.
编辑————————————————- ——
谢谢dasblinkenlight我得到了答案.
附带说明一下,我不同意ORMLite库UpdateOnly()将item.Id视为文字“ Id”的方式,并且未使用其实际值.
意味着此UpdateOnly()函数仅适用于硬编码的字符串单元测试.在实际使用中变得很奇怪.
不知道是设计使然还是小故障.
解决方法:
对我而言,最可能的原因是ORMLite不会将item.Id视为常量.它看到它是要更新的对象的一部分,并使用其名称而不是其值.
您应该可以通过引入一个临时变量来解决此问题,如下所示:
using (var o = Conn.OpenDbConnection()) {
var onlyFields = (x => x.LastLoggedIn);
vat itemId = item.Id;
var where = (x => x.Id == itemId);
return o.UpdateOnly(item, onlyFields, where);
}
现在,ORMLite将无法查看itemId,因此除了将其值用作常量或为其引入参数之外,它将没有其他选择.
标签:servicestack,ormlite-servicestack,sql,c 来源: https://codeday.me/bug/20191122/2058773.html