📜  NHibernate-覆盖配置(1)

📅  最后修改于: 2023-12-03 15:03:11.214000             🧑  作者: Mango

NHibernate-覆盖配置介绍

NHibernate是一个用于.NET平台的ORM(Object-Relational Mapping)框架,它使用XML或Fluent API配置类映射和数据库连接信息。我们可以使用NHibernate的覆盖配置来针对每个持久类提供定制化的映射和配置。

覆盖配置的含义

覆盖配置是在全局配置之上的一种局部配置,允许我们为特定的类或属性提供映射或配置设置,并覆盖全局默认值。使用覆盖配置,我们可以达到以下目的:

  • 对于某些属性,不使用全局默认类型映射,而使用特定的类型映射
  • 对于某些类,改变默认表名或架构名
  • 对于某些类,录入对状态变化的更改信息
覆盖配置的用法

我们可以使用xml或fluent api作为NHibernate的配置方式,这里我们以xml方式举例。

Step 1: 开启默认覆盖配置

在全局配置文件中开启默认覆盖配置:

<configuration>
  <configSections>
    <section name="hibernate-configuration" type="NHibernate.Cfg.ConfigurationSectionHandler,NHibernate" />
  </configSections>
 
  <hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
    <session-factory>
      ...
      <mapping assembly="YourAssembly" />
      <mapping assembly="NHibernate.Test" />
      <mapping assembly="NHibernate.Test.Criteria" />
      <mapping assembly="NHibernate.Test.NonSerializable" />
      <mapping assembly="NHibernate.Test.Proxy" />
      
      <!-- 开启默认覆盖配置 -->
      <default-mapping>
        ...
      </default-mapping>
    </session-factory>
  </hibernate-configuration>
</configuration>
Step 2: 添加类的覆盖配置

对于一个指定的类,可以在默认覆盖配置下设置新的映射:

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
  assembly="NHibernate.Test" namespace="NHibernate.Test.CfgTests">
  
  <class name="Simple" >
    <id name="Id">
      <generator class="identity"/>
    </id>
    
    <!-- 通过class元素新增覆盖配置 -->
    <class name="Simple">
      <id name="Id">
        <generator class="identity" />
      </id>
      <property name="Name" />
    </class>
  </class>
</hibernate-mapping>
Step 3: 添加属性的覆盖配置

对于一个指定的属性,可以在默认覆盖配置下设置新的映射信息:

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
  assembly="NHibernate.Test" namespace="NHibernate.Test.CfgTests">
  
  <class name="Simple" >
    <id name="Id">
      <generator class="identity"/>
    </id>
    
    <property name="Name" />
    
    <!-- 通过property元素新增覆盖配置 -->
    <property name="Name" column="PersonName" />
  </class>
</hibernate-mapping>
Step 4: 添加超元素的覆盖配置

对于一组指定的XML元素,可以在默认覆盖配置下设置新的映射信息:

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
  assembly="NHibernate.Test" namespace="NHibernate.Test.CfgTests">
  
  <class name="Simple" >
    <id name="Id">
      <generator class="identity"/>
    </id>
    <property name="Name" />
    
    <!-- 通过超元素新增覆盖配置 -->
    <any name="Any" meta-type="IType">
      <column name="ValueType"/>
      <column name="IntValue"/>
    </any>
  </class>
</hibernate-mapping>
结束语

使用NHibernate的覆盖配置可以有效地提高代码的灵活性和复用性,让我们在满足需求的同时减少代码量和提高代码可维护性。在使用时,需要注意全局配置与局部配置的顺序和优先级,以及新的配置是否适合我们所需的实现效果。