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. JDBC - Oracle PreparedStatement (GeneratedKey kind) ArrayIndexOutOfBoundsException

    问题: Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 12at oracle.jdbc. ...

  2. 使用 Windows PowerShell 来管理和开发 windowsazure.cn 账户的特别注意事项

    6月6日,微软面向中国大陆用户开放了Microsoft Azure公众预览版的申请界面.大家可以申请免费的 beta 试用,收到内附邀请码的通知邮件后只需输入激活码即可开始免费试用.具体网址为: ht ...

  3. 剑指offer系列30-----删除链表中重复的节点

    [题目]在一个排序的链表中,存在重复的结点, * 请删除该链表中重复的结点,重复的结点不保留,返回链表头指针. * 例如,链表1->2->3->3->4->4->5 ...

  4. bzoj2537: [neerc2007]Language Recognition

    Description DFA(确定性有限状态自动机)是一个有向图,顶点称为状态,边称为转移.每个转移用一个字母标记.对于每个状态s和每个转移l,至多有一个转移从s出发且标记为l.DFA有一个初始状态 ...

  5. 关于windows下c/c++的rand()的一个测试

    ,,,}; ,-,,}; ,y=; ;t<<<;t++){ ; x+=xs[d];y+=ys[d]; 在(x,y)绘制一个点; } 根据rand()%4的值决定点的移动方向,生成图像 ...

  6. Glibc 与 libc 的区别和联系

    转http://blog.163.com/dragon_sjl@126/blog/static/100473339201107101517380/ 1.gcc(gnu collect compiler ...

  7. 浅析:setsockopt()改善socket网络程序的健壮性

    1. 如果在已经处于 ESTABLISHED状态下的socket(一般由端口号和标志符区分)调用closesocket(一般不会立即关闭而经历TIME_WAIT的过程)后想继续重用该socket:BO ...

  8. DBA_Oracle DBA常用表汇总(概念)

    2014-06-20 Created By BaoXinjian

  9. PLSQL_PLSQL中DML/DDL/DCL的概念和区分(概念)

    2014-06-20 Created By BaoXinjian

  10. CLR如何调用虚方法、属性和事件

    方法代表在类型或类型的实例上执行某些操作的代码.在类型上执行操作,称为静态方法:在类型的实例上执行操作,称为非静态方法.任何方法都有一个名称.一个签名和一个返回值(可以是void). CLR允许一个类 ...