数据库实例配置


  实例配置就是配置数据库连接字符串。你可以在配置文件里配置多个实例,并指定默认的实例,如果你不指定默认实例,则以第一个实例作为默认实例。


1、常规配置

  • .Net Framework 下的 app.config 或 web.config 文件
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <sectionGroup name="fireasy">
      <section name="dataInstances" type="Fireasy.Data.Configuration.InstanceConfigurationSectionHandler, Fireasy.Data"/>
  </configSections>
  <fireasy>
    <dataInstances default="sqlite">
      <instance name="mysql" providerType="MySql" connectionString="Data Source=localhost;database=northwind;User Id=root;password=faib;pooling=true;charset=utf8"/>
      <instance name="mssql" providerType="SqlServer" connectionString="data source=(local);user id=sa;password=faib;initial catalog=northwind"/>
      <instance name="sqlite" providerType="SQLite" connectionString="Data source=|datadirectory|northwind.db3;Pooling=True;"/>
    </dataInstances>
  </fireasy>
</configuration>
  • .Net Core 下的 appsettings.json 文件
{
  "fireasy": {
    "dataInstances": {
      "default": "sqlite",
      "settings": {
        "mysql": {
          "providerType": "MySql",
          "connectionString": "Data Source=localhost;database=northwind;User Id=root;password=faib;pooling=true;charset=utf8"
        },
        "mssql": {
          "providerType": "SqlServer",
          "connectionString": "data source=(local);user id=sa;password=faib;initial catalog=northwind"
        },
        "sqlite": {
          "providerType": "SQLite",
          "connectionString": "Data source=|appdir|northwind.db3;"
        }
      }
    }
  }
}

  name 为实例的名称,为唯一标识,注意不要和 providerType 混淆起来。default 的取值与 name 相对应。

  providerType 的取值由框架所决定,目前的取值范围为 SqlServerMsSqlMySqlSQLiteOraclePostgreSqlFirebirdOleDbOdbc 几种。


2、自定义提供者

  当 Fireasy 内置的数据库提供者不能满足你时,你需要定义更多的提供者,见 数据库提供者的配置及扩展。数据库实例配置时,不再使用 providerType,而使用 providerName 将此值指向 dbProviders 里的 Key 即可。

  • .Net Framework 下的 app.config 或 web.config 文件
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <sectionGroup name="fireasy">
      <section name="dataInstances" type="Fireasy.Data.Configuration.InstanceConfigurationSectionHandler, Fireasy.Data"/>
      <section name="dataProviders" type="Fireasy.Data.Provider.Configuration.ProviderConfigurationSectionHandler, Fireasy.Data" />
  </configSections>
  <fireasy>
    <dataInstances>
      <instance name="customer" providerName="customer_provider" connectionString="Data Source=localhost;database=northwind;User Id=root;password=faib;"/>
    </dataInstances>
    <dataProviders>
      <provider name="customer_provider" type="demo.MySqlProvider, demo">
        <service type="demo.MySqlSyntaxProvider, demo" />
      </provider>
    </dataProviders>
  </fireasy>
</configuration>
  • .Net Core 下的 appsettings.json 文件
{
  "fireasy": {
      "dataInstances": {
      "default": "customer",
      "settings": {
        "mysql": {
          "providerName": "customer_provider",
          "connectionString": "Data Source=localhost;database=northwind;User Id=root;password=faib;"
        }
      }
    },
    "dataProviders": {
      "settings": {
        "customer_provider": {
          "type": "demo.MySqlProvider, demo",
          "services": [
            {
              "type": "demo.MySqlSyntaxProvider, demo"
            }
          ]
        }
      }
    }
  }
}

3、特殊存储

  默认情况下,连接字符串都是存放在 connectionString 属性里的,你可以通过改变 storeType 将连接字符串存放到当前配置文件以外的任何地方。

  下面分别对 storeType 的类型进行说明。

  (1)xml 表示使用外部一个 Xml 文件进行存储

  • .Net Framework 下的 app.config 或 web.config 文件
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <sectionGroup name="fireasy">
      <section name="dataInstances" type="Fireasy.Data.Configuration.InstanceConfigurationSectionHandler, Fireasy.Data"/>
  </configSections>
  <fireasy>
    <dataInstances default="xml">
      <instance name="xml" storeType="xml" fileName="|datadirectory|db.xml"/>
    </dataInstances>
  </fireasy>
</configuration>
  • .Net Core 下的 appsettings.json 文件
{
  "fireasy": {
    "dataInstances": {
      "default": "xml",
      "settings": {
        "xml": {
          "storeType": "xml",
          "fileName": "|datadirectory|db.xml"
        }
      }
    }
  }
}

  fileName: Xml 文件路径,可以使用路径定位符。

  xmlPath: 存储连接字符串的 Xml 路径。如果忽略,则使用第一个节点存储。

  Xml 文件的格式如下:

<?xml version="1.0" encoding="utf-8" ?>
<connection providerType="SQLite">
  <connectionString>Data source=|datadirectory|northwind.db3;Pooling=True;</connectionString>
</connection>
<!--  使用属性存储 connectionString
<connection providerType="SQLite" connectionString="Data source=|datadirectory|northwind.db3;Pooling=True;" />
-->
<!--  xmlPath 使用 \\projects\sample 
<projects>
  <sample>
      <connstr providerType="SQLite" connectionString="Data source=|datadirectory|northwind.db3;Pooling=True;" />
  </sample>
</projects>
-->

  (2)json 表示使用外部一个 Json 文件进行存储

  • .Net Framework 下的 app.config 或 web.config 文件
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <sectionGroup name="fireasy">
      <section name="dataInstances" type="Fireasy.Data.Configuration.InstanceConfigurationSectionHandler, Fireasy.Data"/>
  </configSections>
  <fireasy>
    <dataInstances>
      <instance name="json" storeType="json" fileName="|datadirectory|db.json"/>
    </dataInstances>
  </fireasy>
</configuration>
  • .Net Core 下的 appsettings.json 文件
{
  "fireasy": {
    "dataInstances": {
      "settings": {
        "json": {
          "storeType": "json",
          "fileName": "|datadirectory|db.json"
        }
      }
    }
  }
}

  fileName: Json 文件路径,可以使用路径定位符。

  Json 文件的格式如下:

{
  "providerType": "SQLite",
  "connectionString": "Data source=|datadirectory|northwind.db3;Pooling=True;"
}

  (3)binary 表示使用外部一个二进制文件进行存储

  • .Net Framework 下的 app.config 或 web.config 文件
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <sectionGroup name="fireasy">
      <section name="dataInstances" type="Fireasy.Data.Configuration.InstanceConfigurationSectionHandler, Fireasy.Data"/>
  </configSections>
  <fireasy>
    <dataInstances>
      <instance name="bin" storeType="binary" fileName="|system|db.dat"/>
    </dataInstances>
  </fireasy>
</configuration>
  • .Net Core 下的 appsettings.json 文件
{
  "fireasy": {
    "dataInstances": {
      "settings": {
        "bin": {
          "storeType": "binary",
          "fileName": "|system|db.dat"
        }
      }
    }
  }
}

  fileName: Json 文件路径,可以使用路径定位符。

  二进制文件是使用 BinaryConnectionStore 进行存储的,你需要定义一个 BinaryConnectionStore 对象,然后使用进 BinaryCompressSerializer 进行序列化生成文件。


  (4)registry 表示使用系统注册表进行存储

  • .Net Framework 下的 app.config 或 web.config 文件
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <sectionGroup name="fireasy">
      <section name="dataInstances" type="Fireasy.Data.Configuration.InstanceConfigurationSectionHandler, Fireasy.Data"/>
  </configSections>
  <fireasy>
    <dataInstances>
      <instance name="reg" storeType="registry" rootKey="hcu" subKey="software\fireasy\samples" valueKey="connstr"/>
    </dataInstances>
  </fireasy>
</configuration>
  • .Net Core 下的 appsettings.json 文件
{
  "fireasy": {
    "dataInstances": {
      "settings": {
        "reg": {
          "storeType": "registry",
          "rootKey": "hcu",
          "subKey": "software\fireasy\samples",
          "valueKey": "connstr"
        }
      }
    }
  }
}

  rootKey: 注册表中的根节点,取值分别为:

    hcu -- 表示 HKEY_CURRENT_USER

    hlm -- 表示 HKEY_LOCAL_MACHINE

    hcc -- 表示 HKEY_CURRENT_CONFIG

    hcr -- 表示 HKEY_CLASSES_ROOT

    hu -- 表示 HKEY_USERS

  subKey: 注册表中的路径,比如 software\fireasy\samples。

  subKey: 注册表中存储连接字符串的 Key,比如 connstr,它的值也是二进制的,其存储机制和 binary 的二进制文件一样。


  (5)route 使用一个路由服务进行中转

  • .Net Framework 下的 app.config 或 web.config 文件
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <sectionGroup name="fireasy">
      <section name="dataInstances" type="Fireasy.Data.Configuration.InstanceConfigurationSectionHandler, Fireasy.Data"/>
  </configSections>
  <fireasy>
    <dataInstances>
      <instance name="route" storeType="route" type="demo.InstanceRouteService, demo"/>
    </dataInstances>
  </fireasy>
</configuration>
  • .Net Core 下的 appsettings.json 文件
{
  "fireasy": {
    "dataInstances": {
      "settings": {
        "route": {
          "storeType": "route",
          "type": "demo.InstanceRouteService, demo"
        }
      }
    }
  }
}

  IInstanceRouteService 在这里不作介绍。


  (6)appsettingsconnectionstrings 分别使用 appSettings 或 connectionStrings 配置节(.Net Framework),使用 Key 对应。

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <sectionGroup name="fireasy">
      <section name="dataInstances" type="Fireasy.Data.Configuration.InstanceConfigurationSectionHandler, Fireasy.Data"/>
  </configSections>
  <appSettings>
      <add key="dbstr" value="Data source=|datadirectory|northwind.db3;Pooling=True;" />
    </appSettings>
  <fireasy>
    <dataInstances>
      <instance key="dbstr" providerType="SQLite" storeType="appsettings" />
    </dataInstances>
  </fireasy>
</configuration>

4、集群配置

  Fireasy 也可以通过集群配置实现读写分离,配置如下:

  • .Net Framework 下的 app.config 或 web.config 文件
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <sectionGroup name="fireasy">
      <section name="dataInstances" type="Fireasy.Data.Configuration.InstanceConfigurationSectionHandler, Fireasy.Data"/>
  </configSections>
  <fireasy>
    <dataInstances>
      <instance name="cluster" providerType="MySql">
        <clusters>
          <master connectionString="Data Source=192.168.1.100;database=test;User Id=root;password=faib;pooling=true;charset=utf8"></master>
          <slaves>
            <add weight="45" connectionString="Data Source=192.168.1.101;database=test;User Id=root;password=faib;pooling=true;charset=utf8"/>
            <add weight="88" connectionString="Data Source=192.168.1.102;database=test;User Id=root;password=faib;pooling=true;charset=utf8"/>
          </slaves>
        </clusters>
      </instance>
    </dataInstances>
  </fireasy>
</configuration>
  • .Net Core 下的 appsettings.json 文件
{
  "fireasy": {
    "dataInstances": {
      "settings": {
        "cluster": {
          "providerType": "MySql",
          "clusters": {
            "master": {
              "connectionString": "Data Source=192.168.1.100;database=test;User Id=root;password=faib;pooling=true;charset=utf8"
            },
            "slaves": [
              {
                "weight": 45,
                "connectionString": "Data Source=192.168.1.101;database=test;User Id=root;password=faib;pooling=true;charset=utf8"
              },
              {
                "weight": 88,
                "connectionString": "Data Source=192.168.1.102;database=test;User Id=root;password=faib;pooling=true;charset=utf8"
              }
            ]
          }
        }
      }
    }
  }
}

  weight 为权重,本技术点详见 读写分离 介绍。


5、连接串加密

  Fireasy 提供特有的连接字符串加密算法,但 Fireasy 并未开放接口给外部使用,如果你需要加密,可以下载安装 CodeBuilder,通过【工具】-【连接串加解密】来生成。配置示例如下(注意以 m: 开头):

  • .Net Framework 下的 app.config 或 web.config 文件
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <sectionGroup name="fireasy">
      <section name="dataInstances" type="Fireasy.Data.Configuration.InstanceConfigurationSectionHandler, Fireasy.Data"/>
  </configSections>
  <fireasy>
    <dataInstances default="mysql">
      <instance name="mysql" providerType="MySql" connectionString="m:158260cded3519f1d571633f4a74f9baf0c7511155c1269e33cfc9a61c33b02e16427a2243a43f49f4749500e7a9d641e7e223f637bcf2fc0edfc28fe2d9890c9fa0b6c2b9984bc08e12580c3f740a2cc3e2a3c11d6590d109d460113c484e0b405f8ab4c5241562"/>
    </dataInstances>
  </fireasy>
</configuration>
  • .Net Core 下的 appsettings.json 文件
{
  "fireasy": {
    "dataInstances": {
      "default": "mysql",
      "settings": {
        "mysql": {
          "providerType": "MySql",
          "connectionString": "m:158260cded3519f1d571633f4a74f9baf0c7511155c1269e33cfc9a61c33b02e16427a2243a43f49f4749500e7a9d641e7e223f637bcf2fc0edfc28fe2d9890c9fa0b6c2b9984bc08e12580c3f740a2cc3e2a3c11d6590d109d460113c484e0b405f8ab4c5241562"
        }
      }
    }
  }
}