0

NHibernate是通过映射文件,将数据表中的记录转化为对象,将记录中的字段转化为对象的属性,所以说映射文件是O/R映射中至关重要的一个环节,下面就对其进行详细的讲解说明。

 

NHibernate中的映射文件其实质是一个XML文档。可用使用任何的文本编辑器对其进行编辑操作。

<?xml version="1.0" ?>

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.0" namespace="Eg" assembly="Eg">

          <class name="Cat" table="CATS" discriminator-value="C">

                    <id name="Id" column="uid" type="Int64">

<generator class="hilo"/>

                    </id>

                    <discriminator column="subclass" type="Char"/>

                    <property name="Birthdate" type="Date"/>

                    <property name="Color" not-null="true"/>

                    <property name="Sex" not-null="true" update="false"/>

                    <property name="Weight"/>

                    <many-to-one name="Mate" column="mate_id"/>

                    <set name="Kittens">

                               <key column="mother_id"/>

                               <one-to-many class="Cat"/>

                    </set>

                    <subclass name="DomesticCat" discriminator-value="D">

                               <property name="Name" type="String"/>

                    </subclass>

          </class>

          <class name="Dog">

                    <!-- mapping for Dog could go here -->

          </class>

</hibernate-mapping>

映射文件中不仅描述了NHibernate在运行时需要使用到的元素类型和属性,同时还包含了额外的元素属性,如被映射字段是否允许为空等。

 

Schema

NHibernate中所使用的所有映射文件均使用nhibernate-mapping-2.0 schemaNHibernate会把这种Schema作为嵌入资源使用。

Hibernate-mapping

<hibernate-mapping

          schema="schemaName" (1)

          default-cascade="none|save-update" (2)

          auto-import="true|false" (3)

          default-access="property|field|nosetter|ClassName" (4)

          assembly="assembly.name" (5)

          namespace="namespace.name" (6)

>

这个元素有六个可选属性。

Schema(可选) :数据表结构名称;

(1)     Default-cascade(可选,默认值为none) :数据表级联类型;

(2)     Auto-import(可选,默认值true) :指示出是否可以在查询语句中不指定类名;

(3)     Default-access(可选,默认值为”property”):指示出NHibernate用于访问字段的策略;

(4)     Assemble(可选):如果在引用实体类时没有指明类名前缀,则用此选项值作为默认的类名前缀;

(5)     Namespace(可选):指示同名称空间;

    如果你有两个同名的被持久化的对象(classname相同),则必须将”auto-import” 选项值设为false,否则当你访问这个对象时NHibernate会抛出一个异常。

 

Class

<class

          name="ClassName" (1)

          table="tableName"(2)

          discriminator-value="discriminator_value"(3)

          mutable="true|false"(4)

          schema="owner"(5)

          proxy="ProxyInterface"(6)

          dynamic-update="true|false"(7)

          dynamic-insert="true|false"(8)

          polymorphism="implicit|explicit"(9)

          where="arbitrary sql where condition"(10)

          persister="PersisterClass"(11)

          lazy="true|false"(12)

/>

(1)     name:持久类在.Net中的类型的的全名及其所在程序集;

(2)     table:数据库中的数据表名称;

(3)     discriminator-value(可选,默认值为类名):用于区分单独的子集,使用与多态形式;

(4)     mutable(可选,默认值为true):指定类实例是否易变;

(5)     schema(可选):重新指定hibernate-mapping中的Schema选项值;

(6)     proxy(可选):指定用于实现惰性初始的接口,如果所有属性都被声明为Virtual,则可以将类名指定给此选项;

(7)     dynamic-update(可选,默认值false):指示出NHibernate在运行时产生的Update SQL语句是否仅包含被修改了的字段;

(8)     dynamic-insert(可选,默认值false):指示出NHibernate在运行时产生的Insert  SQL语句是否仅包含被值不为Null的字段;

(9)     polymorphism(可选,默认值implict):指示出是否需要有确指明查询是否使用多态性;

(10)  where(可选):指定Where SQL语句可以获取这个类类型的对象;

(11)  persister(可选):指定用户自定义的IClassPersister

(12)  lazy(可选):将此项设为true等同与将它自己的类名赋予给proxy选项。


http://chrismao2006.bokee.com/2898127.html

关闭 返回顶部
联系我们
Copyright © 2011. 聚财吧. All rights reserved.