Chapter Configuration
Chapter Configuration
在Web.config 或App.config的configuration节,插入如下配置:
<configuration>
……
<configSections>
<section name="elementFramework" type="XData.Data.Configuration.ElementFrameworkConfigurationSection,ElementFramework" />
</configSections>
<elementFramework>
<instances directory="instances" watch="True" delay="1000" />
</elementFramework>
……
</configuration>
其中:
<instances
directory="instances" 指定实例配置文件所在的目录,必须,可以有多个实例配置文件。
watch="True" 是否监视实例配置文件的变化,可选,默认为False。为False时,忽略配置delay。
delay="1000" 实例配置文件有变化后,响应的延迟时间(去抖动),以毫秒计,可选,默认为1000,且小于1000无效。
/>
实例配置文件是一个xml文件,其后缀为.xf.xml。在用new ElementContext() 或 new ElementContext(string instanceName)创建ElementContext实例时使用。
前者使用default.xf.xml,后者使用instanceName指定的.xf.xml文件,如new ElementContext(“hr”)会使用hr.xf.xml。
注意:一个实例配置文件对应于一个数据库,而不是一个数据库连接(字符串)。XF与EF不同,XF被设计成无状态,因此一个数据库对应多个实例,是没有意义的。
以下内容,需先阅读Chapter Schema。
典型的实例配置文件如下:
<?xml version="1.0" encoding="utf-8"?>
<elementFramework>
<instance>
<!-- XF会根据以下配置创建一个XData.Data.Objects.SqlDatabase(用于SQL Server数据库)实例,ElementFramework指出程序集名称(这里是ElementFramework.dll)。
它继承自抽象类:
public abstract partial class Database
{
public Database(string connectionString, string databaseVersion)
...
}-->
<database type="XData.Data.Objects.SqlDatabase,ElementFramework">
<connectionString type="System.String" value="Data Source=.\SQLEXPRESS;Initial Catalog=Membership;Integrated Security=True" />
<databaseVersion type="System.String" value="1" />
</database>
<!--XF会根据以下配置创建一个继承自NameMap的SingularPluralNameMap实例,构造函数的参数nameMapConfig,来自<nameMapConfigGetter>。-->
<nameMap type="XData.Data.Objects.SingularPluralNameMap,ElementFramework">
<nameMapConfig type="System.Xml.Linq.XElement" getter="nameMapConfigGetter" />
<nameMapVersion type="System.String" value="2" />
</nameMap>
<!--FileNameMapConfigGetter只是简单地载入一个NameMapConfig配置文件(在此是map.xml),它继承自抽象类:
public abstract class NameMapConfigGetter
{
public abstract XElement GetNameMapConfig();
...
}
XF还内置一个PrefixSuffixNameMap类,用法与SingularPluralNameMap相似,只是单复数规则改为前缀后缀。-->
<nameMapConfigGetter type="XData.Data.Objects.FileNameMapConfigGetter,ElementFramework">
<fileName type="System.String" value="map.xml" />
</nameMapConfigGetter>
<!--XF会根据以下配置创建一个SequenceConfigGetter实例,<format>为构造函数提供实参。它继承自抽象类:
public abstract class DatabaseConfigGetter
{
// XF 调用时,注入
internal protected XElement DatabaseSchema { get; set; }
public abstract XElement GetDatabaseConfig();
...
}
SequenceConfigGetter根据参数format,提供为Column设置<Sequence>。
"Sequence-{0}",如数据库中定义了Sequence-Users(此处Users为TableName),会配置到<User>的主键Field。
"Sequence-{0}-{1}",如数据库中定义了Sequence-Users-Id(此处Users为TableName,Id为ColumnName),会配置到<User>的<Id>。-->
<databaseConfigGetter type="XData.Data.Objects.SequenceConfigGetter,ElementFramework">
<format type="System.String" value="Sequence-{0}" />
</databaseConfigGetter>
<!--XF会根据此配置创建一个FilePrimaryConfigGetter实例。它继承自抽象类:
public abstract class PrimaryConfigGetter
{
// XF 调用时,注入
internal protected XElement DatabaseSchema { get; set; }
public abstract XElement GetPrimaryConfig();
...
}
FilePrimaryConfigGetter简单地载入fileName指定的一个配置文件(此处为config.xml),作为primaryConfig。其构造函数为:
public FilePrimaryConfigGetter(string configVersion, string fileName)-->
<primaryConfigGetter type="XData.Data.Objects.FilePrimaryConfigGetter,ElementFramework">
<configVersion type="System.String" value="3" />
<fileName type="System.String" value="config.xml" />
</primaryConfigGetter>
<!--XF会根据此配置创建一个DirectoryNamedConfigsGetter实例,其构造函数只有一个参数directory,用于指出命名配置文件存放的目录。
它继承自抽象类:
public abstract class NamedConfigsGetter
{
internal protected XElement PrimarySchema { get; set; }
public abstract IEnumerable<XElement> GetNamedConfigs();
...
}-->
<namedConfigsGetter type="XData.Data.Objects.DirectoryNamedConfigsGetter,ElementFramework">
<directory type="System.String" value="NamedConfigs" />
</namedConfigsGetter>
</instance>
</elementFramework>
实例配置文件,其实就是为指定的数据库创建一个PrimarySchema和一批(0到多个)NamedSchema。这与Chapter Schema描述是一致的。
不通过实例配置文件,创建ElementContext实例
ElementContext还有一个构造函数:
public ElementContext(Database database, NameMap nameMap, XElement primaryConfig, IEnumerable<XElement> namedConfigs)
注意:这里没有databaseConfig参数,其内容合并在primaryConfig。
版本号
XF会缓存每个实例的PrimarySchema和NamedSchemas。并通过监视实例配置文件的变化,来更新缓存。
当数据库结构发生变化,不但包括Table和Column,也包括Foreign key,Sequence等的改变。通过改变DatabaseVersion来通知XF刷新缓存。
下面的版本号的作用也是一样。
NameMap有如下的构造函数:
public NameMap(XElement nameMapConfig)
nameMapConfig必须有XAttribute DatabaseVersion
public NameMap(XElement nameMapConfig, string nameMapVersion)
nameMapConfig 如有XAttribute DatabaseVersion,其值必须与参数nameMapVersion一致。
nameMapConfig,还可以有XAttribute DatabaseVersion,如存在会和DataBase的DatabaseVersion对比校验。
PrimaryConfig,必须有XAttribute ConfigVersion。NameMapVersion 与 DatabaseVersion可选,如存在分别会检查与NameMap、DataBase一致否。
NamedConfig,必须要有XAttribute Name和NamedConfigVersion。Version可选,如存在会检查与PrimarySchema一致否。
Modifying,无必须的XAttribute。同样,Version可选。如存在会检查与PrimarySchema一致否。
Modifying也可以有XAttribute Name,此Name不会覆盖NamedSchema的Name,而会成为NamePath的一部分。
Chapter Configuration的更多相关文章
- XF 文档 - Element Framework Doc
配置篇 Chapter Configuration Schema篇 Chapter Schema 查询篇 Chapter Querying Data 数据更改及验证篇 Chapter Data Mod ...
- openstack-ansible Chapter 4. Deployment configuration
Initial environment configuration Copy the contents of the /opt/openstack-ansible/etc/openstack_depl ...
- SymmetricDS文档翻译--【Chapter 3. 具体配置(Configuration)[section C]】
3.6. Routers 眼下的实现中提供的Route实现包括: 1. Default Router:这个Router发送全部的数据到Router中定义的目标节点所属的组中的全部的节点. 2 ...
- P6 EPPM Installation and Configuration Guide 16 R1 April 2016
P6 EPPM Installation and Configuration Guide 16 R1 April 2016 Contents About Installing and ...
- P6 Professional Installation and Configuration Guide (Microsoft SQL Server Database) 16 R1
P6 Professional Installation and Configuration Guide (Microsoft SQL Server Database) 16 R1 May ...
- Chapter 5: Container
Chapter 5: Container A container is a module that processes the requests for a servlet and populates ...
- CCJ PRML Study Note - Chapter 1.6 : Information Theory
Chapter 1.6 : Information Theory Chapter 1.6 : Information Theory Christopher M. Bishop, PRML, C ...
- [转载]Spring Annotation Based Configuration
Annotation injection is performed before XML injection, thus the latter configuration will override ...
- [转] Spring - Java Based Configuration
PS: Spring boot注解,Configuration是生成一个config对象,@Bean指定对应的函数返回的是Bean对象,相当于XML定义,ConfigurationProperties ...
随机推荐
- 自媒体时代网络脱口秀节目的“五W”分析——以《罗辑思维》为例
摘 要:随着互联网的发展,网络媒介生态的变化正在悄然进行.一大批网络自媒体节目<罗辑思维><晓说><凯子曰>等进入大众视线,成为大众关注的新焦点,其中<罗辑思 ...
- du 命令,对文件和目录磁盘使用的空间的查看
Linux du命令也是查看使用空间的,但是与df命令不同的是Linux du命令是对文件和目录磁盘使用的空间的查看,还是和df命令有一些区别的. 1.命令格式: du [选项][文件] 2.命令功能 ...
- phpstorm laravel单元测试 配置
laravel中集成了单元测试工具phpunit可以在项目的根目录下进行使用,命令是:phpunti ./tests/单元测试文件名称.在phpstorm中使用phpunit需要做一些配置,指定com ...
- winserver 2008 r2 iis7.5 实现php wordpress url静态化操作步骤(UrlRewrite实现)
参考网址:http://jingyan.baidu.com/article/cbf0e500ebec582eaa2893d2.html 文中涉及到的程序源码以及配置 详见附件:http://files ...
- Puppet Agent/Master HTTPS Communications
The agent/master HTTP interface is REST-like, but varies from strictly RESTful design in several way ...
- Lvs+Keepalived+Squid+Nginx负载均衡
前言* 随着互联网IT行业的发展,越来越多的企业开始使用开源软件搭建自己的web架构,主流的LVS也得到了广泛的应用,在保证高可用的同时,用户对网站的体验速度也有了很高的要求,这时候需要我们在我们的架 ...
- 启动Memcache,出现memcached: error while loading shared libraries: libevent-1.4.so.1: cannot open shared
1.有可能是装了多个 libevent而导致memcache无法识别哪一个,解决方法就是卸载掉一个libevent 2.只安装了一个libevent,但是也报这个错,解决方法 32位系统下:ln ...
- Top 6 Programming Languages for Mobile App Development
Mobile application development industry in the last five years have multiplied in leaps and bounds, ...
- Python 图形 GUI 库 pyqtgraph
原文 Python 图形 GUI 库 pyqtgraph pyqtgraph 是纯 Python 图形 GUI 库,基于PyQT4 /pyside和NumPy.它主要目的用于在数学/科学/工程中.M ...
- 前端实现 SVG 转 PNG
http://fex.baidu.com/blog/2015/11/convert-svg-to-png-at-frontend/ 前言 svg 是一种矢量图形,在 web 上应用很广泛,但是很多时候 ...