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 ...
随机推荐
- Maven相关: An internal error occurred during: "Updating Maven Project". java.lang.NullPointerException
I solved mine by delete the .settings folder and .project file in the project and then reimport the ...
- char与varchar区别-转
1.CHAR的长度是固定的,而VARCHAR2的长度是可以变化的, 比如,存储字符串“abc",对于CHAR (10),表示你存储的字符将占10个字节(包括7个空字符),而同样的VARCHA ...
- SQLSERVER 复制表--和复制有关的系统表
主数据库中的复制表 表名 说明 MSreplication_options 表存储供复制在内部使用的元数据. 此表存储在 master 数据库中. msdb 数据库中的复制表 表名 说明 MSagen ...
- hadoop(四):配置参数
hadoop参数配置,主要是配置 core-site.xml,hdfs-site.xml,mapred-site.xml 三个配置文件,core-site.xml是全局配置,hdfs-site.xml ...
- Async 、 Await 的异步编程(.NET 4.5 新异步模型) [转自MSDN]
使用异步编程,可以避免性能瓶颈和增强应用程序的总体响应能力. 但是,编写异步应用程序的以前的技术可能比较复杂,使它们难以编写,调试和维护. Visual Studio 2012 引入了一个简化的方法, ...
- js之引用类型
一.摘要: <javascript高级程序设计第三版>一书中单独有一章对js的引用类型(Object.Array.RegExp.Function:基本包装类型:Boolean.Number ...
- HackerRank "Components in a graph"
Regular Union-Find practice one. #include <cmath> #include <cstdio> #include <climits ...
- MySQL错误: could not retrieve transation read-only status server
问题描述: java代码在开始事务后,先做了一个查询,再insert,此时会报: java.sql.SQLException: could not retrieve transati ...
- UDP 单播、广播和多播
阅读目录(Content) 一.UDP广播 二.UDP多播 1.多播(组播)的概念 2.广域网的多播 三.UDP广播与单播 广播与单播的比较 使用UDP协议进行信息的传输之前不需要建议连接.换句话说就 ...
- (C#) Parse xml 时, 返回的node值总是null。
网上查了一下,原因在于要parse的Xml文件本身包含了一些namespace,这些需要被添加进去. http://msdn.microsoft.com/zh-cn/library/system.xm ...