数据库实例配置
实例配置就是配置数据库连接字符串。你可以在配置文件里配置多个实例,并指定默认的实例,如果你不指定默认实例,则以第一个实例作为默认实例。
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 的取值由框架所决定,目前的取值范围为 SqlServer
或 MsSql
、MySql
、SQLite
、Oracle
、PostgreSql
、Firebird
、OleDb
和 Odbc
几种。
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)、 appsettings 或 connectionstrings 分别使用 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"
}
}
}
}
}