下一个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”。因为这是设置的第一个参数,所以string将这个字符串'Popularity+1‘赋给一个整数。
这是一个bug,还是我做错了什么?
发布于 2011-01-11 02:44:42
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();发布于 2011-01-11 01:13:51
如果这能行得通,我会很惊讶。当我需要将一个字符串作为SQL的一部分(而不是通过SubSonic)进行计算时,我几乎总是不得不使用CodingHorror。
但是,您应该能够通过使用单独的查询来执行此操作。类似于:
Db.Update<Tag>()
.Set("Popularity")
.EqualTo(Tag.SingleOrDefault(t => t.TagId == tagId).Popularity + 1)
.Where<Tag>(x => x.TagId == tagId)
.Execute();https://stackoverflow.com/questions/4645906
复制相似问题