疑难解惑指南 - 如何设置连接的数据库方言(Database Dialect)?

优质
小牛编辑
132浏览
2023-12-01

有时,使用 providerName 的自动方言检测可能不会正常工作,或对于某些连接,你想要使用 SqlServer2000 或 SqlServer2005 方言。

可以设置默认的全局方言,但这不会覆盖自动检测:

  1. SqlSettings.DefaultDialect = SqlServer2005Dialect.Instance;

由于 “Northwind” 和 “Default” 连接的提供者名称是 “System.Data.SqlClient”,即使你重写了全局方言,Serenity 也将自动把它们的方言设置为 SqlServer2012。

但是也可能在基本的连接键(connection key)中修改方言:

  1. public static partial class SiteInitialization
  2. {
  3. public static void ApplicationStart()
  4. {
  5. try
  6. {
  7. SqlConnections.GetConnectionString("Default").Dialect =
  8. SqlServer2005Dialect.Instance;
  9. SqlConnections.GetConnectionString("Northwind").Dialect =
  10. SqlServer2005Dialect.Instance;

Serenity 1.8.8+ 也支持通过应用程序配置条目设置:

  1. <configuration>
  2. <appSettings>
  3. <add key="ConnectionSettings" value="{
  4. Default: {
  5. Dialect: 'SqlServer2005'
  6. },
  7. Northwind: {
  8. Dialect: 'Postgres'
  9. }
  10. "/>

在行(Rows)中提示关于 CONCAT 及其他类似信息的警告

Serene 已经支持多种数据库引擎,包括 MySQL、Postgress 等。这些数据库没有像 MsSqlServer 的字符串加号(+)运算符。因此,在 Northwind 中,用 CONCAT 函数来替代 + 运算符:

  1. [Expression("CONCAT(T0.[FirstName], CONCAT(' ', T0.[LastName]))")]
  2. public String FullName
  3. {
  4. get { return Fields.FullName[this]; }
  5. set { Fields.FullName[this] = value; }
  6. }

CONCAT 在 Sql Server 2012 之后的版本是可用的。所以如果你要使用旧版本的 SQL server,例如 SQL server 2005 或 SQL server 2008 ,这些表达式将被替换成:

  1. [Expression("T0.[FirstName] + ' ' + T0.[LastName]")]
  2. public String FullName
  3. {
  4. get { return Fields.FullName[this]; }
  5. set { Fields.FullName[this] = value; }
  6. }