【IT168技术文档】
前面的介绍中我们已经看到,实体定义中我们可以给Entity设置TableAttribute,对于属性我们可以设置Primary、ColumnName或CustomProperty这些Attribute。以Attribute方式设置元数据很方便,但是,对元数据的修改必须重新编译才能生效。为了解决这样的问题,NBear中同时提供在外部配置文件中定义这些元数据的方式。
注意,如果对同一个Entity或属性同时设置了Attribute和外部文件设置,配置在外部配置文件中的设置会覆盖直接写在Attribute中的设置。这样有一个很大的好处:我们可以在初始开发时将配置直接写在Attribute中,这样非常方便调试和修改。而在程序部署以后,如果需要修改元数据定义,只需修改外部配置文件,就能在不需重新编译的情况下及时生效。
下面是一个外部配文件的示例:
<?xml version="1.0" encoding="utf-8" ?> <configuration> <configSections> <section name="EntityConfiguration" type="NBear.Common.EntityConfigurationSection, NBear.Common"/> </configSections> <EntityConfiguration> <Entity fullName="NBear.Test.UnitTests.OrderDetailsExtended2"> <Table isView="true"> <Name>Order Details Extended</Name> </Table> <Columns> <Column propertyName="ProductName2" columnName="ProductName"/> <Column propertyName="OrderID" isPrimaryKey="true"/> <Column propertyName="ProductID" isPrimaryKey="true"/> <Column propertyName="Sample2" isCustomProperty="true"> <Parameters> <Parameter>Sample2</Parameter> </Parameters> </Column> </Columns> </Entity> </EntityConfiguration> </configuration>
注意,必须在Web.config或App.config中先注册一个名叫EntityConfiguration的section,然后在这个EntityConfiguration中定义实体的元数据。基本的格式如上面的示例。
每个Entity对应一个Entity元素,Entity元素只有一个属性fullName,值必须为typeof(Entity).FullName。Entity可以包含一个Table和一个Columns子元素。
Table元素可以包含如下属性:isView, updateExtendedOnly, isContract和updateTableName,以及如下子元素:Name,AdditionalWhere和AdditionalInsert,分别代表TableAttribute的相应属性。
Columns元素下定义对Column的定义。
每个Column元素可以包含属性包括:propertyName,columnName,isPrimaryKey和isCustomProperty,以及Parameters子元素(如示例),分别代表了PrimaryKey,ColumnName和CustomProperty这些Attribute的定义。