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. Cobar使用文档(可用作MySQL大型集群解决方案)

    原文:http://my.oschina.net/ydsakyclguozi/blog/374564 最近好不容易抽空研究了下Cobar,感觉这个产品确实很不错(在文档方面比Amoeba强多了),特此 ...

  2. 远程访问linux环境安装图形界面问题解决汇总

    本文内容转摘于其他网页,仅用于学习: 通常Linux出现 DISPLAY 尚未设置 解决方法,在root用户目录下执行#xhost +: [root@TEST144239 ~]# xhost + ac ...

  3. cocoapods的安装及注意事项

    cocoapods是运行在ruby环境下的,在ruby环境的 ,像cocoapods这样的开源项目时放在放在rubygems服务器上面的,但国内访问https://rubygems.org/ 的时候会 ...

  4. EXECUTE 后的事务计数指示 BEGIN 和 COMMIT 语句的数目不匹配

    代码中的事务包含了存储过程中的事务.

  5. HackerRank "Manasa and Prime game"

    Intuitive one to learn about Grundy basic :) Now every pile becomes a game, so we need to use Spragu ...

  6. 228. Summary Ranges

    Given a sorted integer array without duplicates, return the summary of its ranges. For example, give ...

  7. python 虎扑注册检查脚本

    ulipad,看着蛮舒服的. 图里的代码就是今天晚上的成果. 突然就想看看python这个被很多人说是优雅的语言,于是晚上没事就配了配环境,做了个东西 #encoding: utf-8 import ...

  8. win7 Android环境搭配

    Eclipse环境 第一步:下载JDK http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.h ...

  9. JVM知识学习与巩固

    JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的. 我们运行和调 ...

  10. SOA_环境安装系列5_Oracle ADF安装SOA Extensions(案例)

    2015-01-02 Created By BaoXinjian