SubSonic3 SetExpression问题

发布于 2024-10-11 15:58:58 字数 537 浏览 4 评论 0原文

接下来的 SubSonic3 查询给我一个错误:

Db.Update<Tag>()
    .SetExpression("Popularity")
    .EqualTo("Popularity+1")
    .Where<Tag>(x => x.TagId == tagId)
    .Execute();

错误:失败:System.FormatException:无法将参数值从字符串转换为 Int32。

生成的sql是可以的,但是参数集合中有两个需要设置的参数。

UPDATE [Tagging].[Tag] 
SET Popularity=Popularity+1
WHERE [Tagging].[Tag].[TagId] = @0

参数之一将 @up_Popularity 设置为“Popularity+1”。由于这是设置的第一个参数,因此 sql 会尝试将此字符串“Popularity+1”分配给一个整数。

这是一个错误还是我做错了什么?

Next SubSonic3 query gives me an error:

Db.Update<Tag>()
    .SetExpression("Popularity")
    .EqualTo("Popularity+1")
    .Where<Tag>(x => x.TagId == tagId)
    .Execute();

Error: failed: System.FormatException : Failed to convert parameter value from a String to a Int32.

The sql that is generated is ok, but the collection of parameters contains two parameters that need to be set.

UPDATE [Tagging].[Tag] 
SET Popularity=Popularity+1
WHERE [Tagging].[Tag].[TagId] = @0

One of the parameters set @up_Popularity to 'Popularity+1'. Since this is the first parameter being set, sql triese to assign this string 'Popularity+1' to an integer.

Is this a bug or am I doing something wrong?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

ヅ她的身影、若隐若现 2024-10-18 15:58:58
Db.Update<Tag>()
    .SetExpression("Popularity = Popularity + 1")
    .Where<Tag>(x => x.TagId == tagId)
    .Execute();

这应该可行......但我认为这是为了批发更新。没有把握。您最好的选择是使用我们的 CodingHorror:

new CodingHorror("UPDATE Tags SET Popularity = Popularity + 1 WHERE @1", 
  tagId).Execute();
Db.Update<Tag>()
    .SetExpression("Popularity = Popularity + 1")
    .Where<Tag>(x => x.TagId == tagId)
    .Execute();

This should work ... but I think it's for wholesale updates. Not sure. Your best bet is to use our CodingHorror:

new CodingHorror("UPDATE Tags SET Popularity = Popularity + 1 WHERE @1", 
  tagId).Execute();
长亭外,古道边 2024-10-18 15:58:58

如果这能起作用的话我会感到惊讶。当我需要将字符串评估为 SQL 的一部分(而不是由 SubSonic)时,我几乎总是最终不得不使用 编码恐怖

但是,您应该能够通过使用单独的查询来完成此操作。像这样的东西:

Db.Update<Tag>()
  .Set("Popularity")
  .EqualTo(Tag.SingleOrDefault(t => t.TagId == tagId).Popularity + 1)
  .Where<Tag>(x => x.TagId == tagId)
  .Execute();

I'd be amazed if that was supposed to work. When I need to have a string evaluated as part of the SQL (and not by SubSonic) I almost always end up having to use a CodingHorror.

However, you should be able to do this by using a separate query. Something like:

Db.Update<Tag>()
  .Set("Popularity")
  .EqualTo(Tag.SingleOrDefault(t => t.TagId == tagId).Popularity + 1)
  .Where<Tag>(x => x.TagId == tagId)
  .Execute();
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文