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时,日志会输出调整好的最终连接字符串,可用于学习。
NewLife.XCode教程系列[2019版]
原文:https://www.cnblogs.com/nnhy/p/xcode_setting.html