.mdm.xml文件的基本结构如下

   1:  <?xml version="1.0" ?>
   2:  <miniaccess-mapping xmlns="urn:miniaccess-mapping-1.0" >
   3:  <access-type name="System.Data.SqlClient">
   4:    <provider name="" entity-namespace="" is-debug="">
   5:      <entity name="" table="" command-type="" insert="" 
   6:                delete="" multiple-delete="" update="" multiple-update="" fetch="" search="" >
   7:        <primary-key name="" column="" column-type="" update="true|flase" insert="true|false"/>
   8:        <property name=""    column="" column-type="" update="true|flase" insert="true|false"/>
   9:        <many-to-one name="" column="" column-type="" update="true|flase" insert="true|false"/>
  10:        <one-to-one name="" column="" column-type="" update="true|flase" insert="true|false"/>
  11:      </entity>
  12:    </provider>
  13:  </access-type>
  14:  </miniaccess-mapping>

其中:

  1. 一个程序集只能唯一的对应一个映射文件。同一个程序集事实上要操作的数据库,根据配置文件中连接字符串的不同而任意改变,多个程序集在一个项目中可以有多个映射文件,但是最终可能只操作同一个数据库。
  2. <miniaccess-mapping>是xml文件的根元素。
  3. <access-type>的name唯一,表示不同的存储方式,对应于Ado.Net中的数据提供者,目前只支持SqlServer,即System.Data.SqlClient。
  4. <provider>允许多个,一般表示某个数据库,该数据库提供了某个业务领域所需要的数据。
    • name在一个access-type以内唯一。
    • entityNamespace: 表示实体类所在的命名空间,这样,在Entity中就只需给出非限定的类名称。
    • is-debug:为true时,每次运行时重新生成所有的数据库存储过程。
  5. <entity>表示一个实体的映射关系,一个映射表中可以多个<entity>标签。
    • name属性:必需,唯一,实体类的名称。
    • table属性:可选,对应的表的名称,默认和name相同。
    • command-type指出命令的ADO.Net中的CommandType,是对后面的命令的说明,可选,默认值由提供者确定,SqlServer提供者默认值为存储过程。
    • insert/delete/multiple-delete/update/fetch/search指出访问数据库时要执行的命令,可以是存储过程名或者SQL语句,指定为""字符串表示不支持该命令。可选,默认值由提供者根据数据库架构自动生成命令。
  6. <entity>下的每一种子元素都可以允许0个到多个,除了name和column外都是可选。
    • <primary-key><property>和<many-to-one>表示实体中的属性,前者表示主键字段、常规字段和外建字段。class中可以有多个主键字段(即复合主键)。
    • name 实体的属性名称,必填。
    • column 表的字段名称,可选,默认和实体的属性名称相同。
    • column-type 表字段的类型,可选,默认值根据数据库的架构确定。
    • update 更新语句是否包括该字段,值为true|flase,可选,默认值根据数据库的架构确定。
    • insert 插入语句是否包括该字段,值为true|flase,可选,默认值根据数据库的架构确定。
  7. 一个程序集中可以有多个实现IAccess的类及其相关的实体类,不同的IAccess类对应映射文件中的不同的provider元素。provider的name属性值在程序集中硬编码,不可改变,显然,提供者的类型也已经确定不可改变。