从ServiceStack.Ormlite生成的查询中删除双引号

时间:2018-08-06 22:35:20

标签: c#-4.0 ormlite-servicestack

我们的DBA不希望我们在查询中使用双引号字段和表(不要问我原因)...问题是ServiceStack.OrmLite将所有双引号和表都用双引号引起了,而我没有关于如何禁用此行为的任何想法。 我们正在使用ServiceStack.OrmLite版本4.5.4.0

例如:

public class ClassA {
   public int ID {get;set;}
   public string Name {get;set;}
}

如果我们进行以下简单查询:

using (IDbConnection db = dbFactory.Open())
{
   return db.LoadSingleById<ClassA>(id);
}

将生成:

select "ID", "Name" from "ClassA" where "ID" = @0

这就是我们的dba想要的:

select ID, Name from ClassA where ID = @0

如果有人能帮助我,我会很感激

PS,我知道我可以自己编写所有查询,但是要更改的代码太多,所以我试图避免使用此解决方案,因为此刻此过程非常耗时。

1 个答案:

答案 0 :(得分:2)

根据我对源代码的检查,似乎无法立即对其进行更改。

ORMLite构建查询时,它将获取列名并将其包装在引号中。看到这里:https://github.com/ServiceStack/ServiceStack.OrmLite/blob/master/src/ServiceStack.OrmLite/OrmLiteDialectProviderBase.cs#L384

一种替代方法是创建一个新的OrmLiteDialectProvider,该继承您正在使用的任何提供程序(例如SQL Server,Oracle等),并覆盖以下方法之一:

  • GetQuotedColumnName(string columnName)
  • GetQuotedName(string name)

覆盖其中任何一个以排除引号都会为您提供所需的信息。