使用ServiceStack.OrmLite执行原始SQL

时间:2013-07-08 12:53:50

标签: sql servicestack ormlite-servicestack

我使用MS SQL Server工作ServiceStack.OrmLite。我想对数据库执行原始SQL,但原始文档包含如何仅使用SELECT语句执行此操作的说明。这对我来说还不够。

我无法找到运行任何简单的方法:

UPDATE table1
SET column1 = 'value1' 
WHERE column2 = value2

使用,例如:

var two = db.Update(@"UPDATE table1
    SET column1 = 'value1' 
    WHERE column2 = value2");

使用db.Update()或db.Update<>运行此表达式产生不一致的错误,如

  

关键字'UPDATE'附近的语法不正确。

我想使用原始sql,因为我的真实UPDATE表达式使用了JOIN。

2 个答案:

答案 0 :(得分:6)

db.Update用于更新模型或部分模型,如OrmLite's Documentation on Update所示。您可以选择使用松散类型的API来构建更新语句,例如:

db.Update(table: "table1", 
  set: "column1 = {0}".Params("value1"), 
  where: "column2 = {0}".Params("value2"));

Params扩展方法会为您转义值。

否则执行任意原始sql的方法是使用db.ExecuteSql()

答案 1 :(得分:1)

如果它是SELECT语句并且您想使用原始sql执行,则可以使用:

List<Person> results = db.SqlList<Person>("SELECT * FROM Person WHERE Age < @age", new { age=50});

参考:https://github.com/ServiceStack/ServiceStack.OrmLite#typed-sqlexpressions-with-custom-sql-apis