📅  最后修改于: 2023-12-03 15:03:11.214000             🧑  作者: Mango
NHibernate是一个用于.NET平台的ORM(Object-Relational Mapping)框架,它使用XML或Fluent API配置类映射和数据库连接信息。我们可以使用NHibernate的覆盖配置来针对每个持久类提供定制化的映射和配置。
覆盖配置是在全局配置之上的一种局部配置,允许我们为特定的类或属性提供映射或配置设置,并覆盖全局默认值。使用覆盖配置,我们可以达到以下目的:
我们可以使用xml或fluent api作为NHibernate的配置方式,这里我们以xml方式举例。
在全局配置文件中开启默认覆盖配置:
<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>
对于一个指定的类,可以在默认覆盖配置下设置新的映射:
<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>
对于一个指定的属性,可以在默认覆盖配置下设置新的映射信息:
<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>
对于一组指定的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的覆盖配置可以有效地提高代码的灵活性和复用性,让我们在满足需求的同时减少代码量和提高代码可维护性。在使用时,需要注意全局配置与局部配置的顺序和优先级,以及新的配置是否适合我们所需的实现效果。