如何修改由ServiceStack.OrmLite生成的SQL?(How can I modify

2019-10-18 04:51发布

我想用ServiceStack的 OrmLite在C#查询AWS红移 。 AWS红移使用PostgreSQL的有线协议作为其查询界面,并提出在可以运行的查询,其中之一是,它不能接受参数化查询(我已经告诉了一些限制,我还没有真正能够找到这在文件备份尚未 )。

所以,我研究它是否有可能使用ORM生成参数化SQL,然后查找/替换参数值。

我怎样才能获得通过OrmLite产生的,然后改变它的SQL运行之前呢?

Answer 1:

从OrmLite的文档 :

默认情况下,OrmLite 没有使用参数化SQL。 只有API使用参数化语句的所有SQL操作,这些都与帕拉姆后缀,例如确定的:

参数写入操作

db.InsertParam(new Person { FirstName = "Jimi", LastName = "Hendrix", Age = 27})
db.UpdateParam(new Person { FirstName = "Jimi", LastName = "Hendrix", Age = 27})
db.DeleteByIdParam<Person>(1)
Parameterized Read operations

var people = db.SelectParam<Person>(q => q.Age == 27)
var person = db.GetByIdParam<Person>(1)

//Existing parameterized query API's
var people = db.Where<Person>(new { FirstName = "Jimi", Age = 27 })
var people = db.Query<Track>("FirstName = @name and Age = @age", 
    new { name = "Jimi", age = 27 })

在包含单词查询哪里还使用参数化的SQL另外选择方式( 其他选择方法不 )。 匿名类型传递到哪里都像对待一个和过滤。

var track3 = db.Where<Track>(new { AlbumName = "Throwing Copper", TrackNo = 3 })

查询语句使用与所提供匿名类型(如果有的话)的属性取在参数化SQL

var track3 = db.Query<Track>(
"select * from Track Where AlbumName = @album and TrackNo = @trackNo", 
    new { album = "Throwing Copper", trackNo = 3 })

它执行后(不是之前),你可以得到最后生成的SQL语句:

db.GetLastSql()


Answer 2:

OrmLite不(目前),使这将产生可用时,它已经被执行后,直到SQL。

我发现红移确实在事实上支持参数化查询。



文章来源: How can I modify the SQL generated by ServiceStack.OrmLite?