gpt4 book ai didi

c# - ServiceStack ORMLite UpdateOnly 故障

转载 作者:行者123 更新时间:2023-11-30 16:14:22 27 4
gpt4 key购买 nike

我有一个对象 User,其属性为 LastLoggedIn,以下是我为更新此字段而编写的代码:

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 的屏幕截图)

enter image description here

请注意 SQL Profiler 显示“Id”=“Id”?它确实应该是“Id”=“iNa7EKWjKkKMu ...”。我做错了什么?感谢您的帮助。

编辑-------------------------------------------- ----------

感谢 dasblinkenlight 我得到了答案。

旁注,我不同意 ORMLite 库 UpdateOnly()item.Id 视为文字“Id”的方式,并且没有使用它的真正的值(value)。

这意味着此 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 没有可见性,因此除了将其值用作常量或为其引入参数外,它别无选择。

关于c# - ServiceStack ORMLite UpdateOnly 故障,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20814561/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com