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 ...
随机推荐
- WebLogic11g-半小时让你的domain集群化
WebLogic11g-半小时让你的domain集群化 WebLogic11g-负载分发 weblogic proxy.war配置 web.xml <!DOCTYPE web-app PUBLI ...
- CentOS 系统配置完jdk,tomcat mysql,nginx 项目发布步骤
1.启动项目之前,一定要先启动nginx服务 重启nginx服务的命令:./nginx -s reload 2.然后启动三个tomcat的服务 3.如果只能进入tomcat,不能进入项目:把tomca ...
- Notepad++前端开发常用插件介绍 - BorisHuai前端修炼 - 博客频道 - CSDN
Notepad++前端开发常用插件介绍 - BorisHuai前端修炼 - 博客频道 - CSDN.NET http://blog.csdn.net/borishuai/article/details ...
- 转: ExtJS中xtype一览
转: ExtJS中xtype一览 基本组件: xtype Class 描述 button Ext.Button 按钮 splitbutton Ext.SplitButton 带下拉菜单的按钮 cycl ...
- php 添加redis扩展(一)
phpredis 下载地址 http://pan.baidu.com/s/1dFFK0gh 提取码:见评论,(~..)亲身试验,可行 1.下载到目录 cd /usr/local/src 2.解压 t ...
- [转] matlab figure最大化
http://blog.163.com/yinhexiwen@126/blog/static/6404826620122942057214/ % figure 窗口最大化,坐标轴也随着窗口变大而相应变 ...
- 提示“应用程序无法启动,因为应用程序的并行配置不正确”不能加载 System.Data.SQLite.dll
新版本SQLITE,如果下载Precompiled Binaries版会出现提示“应用程序无法启动,因为应用程序的并行配置不正确”不能加载 System.Data.SQLite.dll. 下载Prec ...
- zend studio一些常用配置
zend studio 常用 配置 1.zend中添加注释是ctrl+slash,这个slash在哪里?如何来取消注释 slash是斜杠'/'那个键,就是在,.之后的那个. 进行注释是 ctrl+'/ ...
- TCP/IP四层模型和OSI七层模型的概念
转:http://blog.csdn.net/superjunjin/article/details/7841099/ TCP/IP四层模型 TCP/IP是一组协议的代名词,它还包括许多协议,组成了T ...
- 修改mongodb oplog size
转载地址:http://blog.csdn.net/huwei2003/article/details/43307647 修改mongodb oplog size oplog简介: oplog:ope ...