NewLife.XCode是一个有10多年历史的开源数据中间件,由新生命团队(2002~2019)开发完成并维护至今,以下简称XCode。
整个系列教程会大量结合示例代码和运行日志来进行深入分析,蕴含多年开发经验于其中,代表作有百亿级大数据实时计算项目。
开源地址:https://github.com/NewLifeX/X (求star, 652+)
XCode支持SqlServer、SQLite、MySql、Oracle、PostgreSQL、Access、SqlCe等多种数据库,常用连接字符串模板如下:
<add name="SQLite" connectionString="Data Source=test.db;" providerName="Sqlite" />
<add name="MySql" connectionString="Server=.;Port=3306;Database=mysql;Uid=root;Pwd=;" providerName="MySql.Data.MySqlClient" />
<add name="MSSQL" connectionString="Server=.;User ID=sa;Password=sa;Database=Test;datapath=~\App_Data" providerName="System.Data.SqlClient" />
<add name="Oracle" connectionString="Data Source=Tcp://127.0.0.1/ORC;User ID=sys;Password=admin;Owner=mis" providerName="System.Data.OracleClient" />
<add name="PostgreSQL" connectionString="Server=.;Database=master;Uid=root;Pwd=root;" providerName="PostgreSQL.Data.PostgreSQLClient" />
<add name="MSSQL" connectionString="Server=.;Integrated Security=SSPI;Database=Test" providerName="System.Data.SqlClient" />
<add name="Oracle" connectionString="Data Source=orc;User ID=sys;Password=admin;" providerName="System.Data.OracleClient" />
<!--OLE DB Services=-1表示打开连接池-->
<add name="Access" connectionString="Provider=Microsoft.Jet.OLEDB.4.0; Data Source=~\App_Data\Test.mdb;Persist Security Info=False;OLE DB Services=-1" providerName="Access"/>
<add name="SqlCe" connectionString="Data Source=test.sdf;" providerName="SqlCe" />
连接字符串最常见的地方就是app.config/web.config中的connectionStrings段。
这里特别注意name,正是数据模型中讲到的连接名ConnName!这个name一般取业务模块名字,上面的名字仅仅是为了表示这是哪一种数据库,实际项目中有用户自己起名字。
每个数据模型生成的实体类都有一个ConnName设置,表明该实体类需要使用哪一个连接,后面是连接字符串和数据库类型。
注意!!!划重点!!!XCode实体类支持任意切换数据库,完全由连接字符串和providerName决定所要使用的数据库!
在这里,强烈推荐开发环境使用SQLite,生产环境再更换SqlServer/MySql/Oracle的连接字符串。
验证连接的办法也很简单,var dal=DAL.Create(ConnName)即可!
DAL是XCode数据层总入口,针对数据库的任何操作都通过该类桥接。
其中DAL.ConnStrs管理着所有的连接名以及对应的连接字符串,DAL.Create(connName)时从中查找并针对连接名创建单一实例(每个连接名一个DAL实例)。
也可以通过DAL.AddConnStr("school", "Data Source=school.db;", null, "MySql")来动态添加连接名以及连接字符串,最后一个参数写数据库名。
连接字符串的第三种使用方式,也是最高级的一种,支持DAL.OnResolve委托,当配置文件或动态配置中找不到相应连接名时,执行该委托。
为了集成配置中心(例如新生命团队的开源项目星尘Stardust),一般在应用初始化时注册DAL.OnResolve到外部配置中心。
最后,如果没有任何地方设置某个连接名,并且配置中心也没有找到,XCode将会自动创建一个SQLite连接字符串。
因此,XCode实体类永远不会提示找不到连接字符串,而是会自动为了创建SQLite连接,并且建库建表。
标准配置文件位于Config/XCode.config,首次使用时自动创建,也可以通过XCode.Setting.Current来读写
<?xml version="1.0" encoding="utf-8"?>
<!--XCode设置-->
<Setting>
<!--调试-->
<Debug>true</Debug>
<!--输出SQL。是否输出SQL语句,默认启用-->
<ShowSQL>true</ShowSQL>
<!--SQL目录。设置SQL输出的单独目录,默认为空,SQL输出到当前日志中。生产环境建议输出到站点外单独的SqlLog目录-->
<SQLPath></SQLPath>
<!--SQL执行时间。跟踪SQL执行时间,大于该阀值将输出日志,默认1000毫秒-->
<TraceSQLTime>1000</TraceSQLTime>
<!--连接映射。连接名映射#,表名映射@,把实体类中的Test2和Test3连接名映射到Test去-->
<ConnMaps></ConnMaps>
<!--参数化添删改查。默认关闭-->
<UseParameter>false</UseParameter>
<!--SQLite默认目录。没有设置连接字符串的连接默认创建SQLite连接,数据库放在该目录-->
<SQLiteDbPath>..\Data</SQLiteDbPath>
<!--备份目录。备份数据库时存放的目录-->
<BackupPath>..\Backup</BackupPath>
<!--命令超时。查询执行超时时间,默认0秒不限制-->
<CommandTimeout>0</CommandTimeout>
<!--数据层缓存。默认0秒-->
<DataCacheExpire>0</DataCacheExpire>
<!--实体缓存过期。整表缓存实体列表,默认10秒-->
<EntityCacheExpire>10</EntityCacheExpire>
<!--单对象缓存过期。按主键缓存实体,默认10秒-->
<SingleCacheExpire>10</SingleCacheExpire>
<!--扩展属性过期。扩展属性Extends缓存,默认10秒-->
<ExtendExpire>10</ExtendExpire>
<!--反向工程。Off 关闭;ReadOnly 只读不执行;On 打开,仅新建;Full 完全,修改删除-->
<Migration>On</Migration>
</Setting>
各配置项解释:
上面的设置对整个应用全局有效,而需要针对具体某个连接进行控制,可以把设置项写在连接字符串中,该功能最常用的场景就是配置中心。
高级设置如下:
SQLite数据库的连接字符串有特殊支持,外部没有设置时,自动配置WAL等以极大提高性能。(提升效果可参考飞仙 http://feixian.newlifex.com )
此外,MySql和Oracle的数据源还支持 Data Source=tcp://10.0.0.3:1234/racdb 的简写用法。
XCode配置Debug为true时,日志会输出调整好的最终连接字符串,可用于学习。