编程语言
首页 > 编程语言> > C#-ServiceStack ORMLite UpdateOnly故障

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