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 schema。NHibernate会把这种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