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的更多相关文章

  1. XF 文档 - Element Framework Doc

    配置篇 Chapter Configuration Schema篇 Chapter Schema 查询篇 Chapter Querying Data 数据更改及验证篇 Chapter Data Mod ...

  2. openstack-ansible Chapter 4. Deployment configuration

    Initial environment configuration Copy the contents of the /opt/openstack-ansible/etc/openstack_depl ...

  3. SymmetricDS文档翻译--【Chapter 3. 具体配置(Configuration)[section C]】

    3.6. Routers 眼下的实现中提供的Route实现包括: 1.      Default Router:这个Router发送全部的数据到Router中定义的目标节点所属的组中的全部的节点. 2 ...

  4. P6 EPPM Installation and Configuration Guide 16 R1 April 2016

    P6 EPPM Installation and Configuration Guide 16 R1         April 2016 Contents About Installing and ...

  5. 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 ...

  6. Chapter 5: Container

    Chapter 5: Container A container is a module that processes the requests for a servlet and populates ...

  7. CCJ PRML Study Note - Chapter 1.6 : Information Theory

    Chapter 1.6 : Information Theory     Chapter 1.6 : Information Theory Christopher M. Bishop, PRML, C ...

  8. [转载]Spring Annotation Based Configuration

    Annotation injection is performed before XML injection, thus the latter configuration will override ...

  9. [转] Spring - Java Based Configuration

    PS: Spring boot注解,Configuration是生成一个config对象,@Bean指定对应的函数返回的是Bean对象,相当于XML定义,ConfigurationProperties ...

随机推荐

  1. 自媒体时代网络脱口秀节目的“五W”分析——以《罗辑思维》为例

    摘 要:随着互联网的发展,网络媒介生态的变化正在悄然进行.一大批网络自媒体节目<罗辑思维><晓说><凯子曰>等进入大众视线,成为大众关注的新焦点,其中<罗辑思 ...

  2. du 命令,对文件和目录磁盘使用的空间的查看

    Linux du命令也是查看使用空间的,但是与df命令不同的是Linux du命令是对文件和目录磁盘使用的空间的查看,还是和df命令有一些区别的. 1.命令格式: du [选项][文件] 2.命令功能 ...

  3. phpstorm laravel单元测试 配置

    laravel中集成了单元测试工具phpunit可以在项目的根目录下进行使用,命令是:phpunti ./tests/单元测试文件名称.在phpstorm中使用phpunit需要做一些配置,指定com ...

  4. winserver 2008 r2 iis7.5 实现php wordpress url静态化操作步骤(UrlRewrite实现)

    参考网址:http://jingyan.baidu.com/article/cbf0e500ebec582eaa2893d2.html 文中涉及到的程序源码以及配置 详见附件:http://files ...

  5. Puppet Agent/Master HTTPS Communications

    The agent/master HTTP interface is REST-like, but varies from strictly RESTful design in several way ...

  6. Lvs+Keepalived+Squid+Nginx负载均衡

    前言* 随着互联网IT行业的发展,越来越多的企业开始使用开源软件搭建自己的web架构,主流的LVS也得到了广泛的应用,在保证高可用的同时,用户对网站的体验速度也有了很高的要求,这时候需要我们在我们的架 ...

  7. 启动Memcache,出现memcached: error while loading shared libraries: libevent-1.4.so.1: cannot open shared

      1.有可能是装了多个 libevent而导致memcache无法识别哪一个,解决方法就是卸载掉一个libevent 2.只安装了一个libevent,但是也报这个错,解决方法 32位系统下:ln ...

  8. Top 6 Programming Languages for Mobile App Development

    Mobile application development industry in the last five years have multiplied in leaps and bounds, ...

  9. Python 图形 GUI 库 pyqtgraph

    原文  Python 图形 GUI 库 pyqtgraph pyqtgraph 是纯 Python 图形 GUI 库,基于PyQT4 /pyside和NumPy.它主要目的用于在数学/科学/工程中.M ...

  10. 前端实现 SVG 转 PNG

    http://fex.baidu.com/blog/2015/11/convert-svg-to-png-at-frontend/ 前言 svg 是一种矢量图形,在 web 上应用很广泛,但是很多时候 ...