Basic O/R Mapping

对象和关系的映射被定义在XML文件里。这个XML文件被设计成易读易修改。这个映射语言是被定义为以对象为中心的而不是以表为中心的,这叫意味着负我们必须提供可持久化的类。
正因为如果,许多NHibernate用户选择手工书写XML映射文件,其实有许多工具可以自动生成XML映射文件的,包括NHibernate.Mapping.Attributes library和许多支持模板级的生成工具(CodeSmith, MyGeneration)。
让我们以一个简单的映射文件开始:

<?xml version="1.0"?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="Eg"
namespace="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>
晕,不懂的地方还真多,没事回家问问老婆,说来惭愧,还没老婆强呐。。
我们将论述上面的XML文件的内容。我们将只论述Nhibernate在运行时用的到的文档的元素,
这个映射文件也包含其它属性和元素,他们能影响数据库的性质(如 not-null属性)。
1.XML NameSpace
所有的XML文档必须有指点的XML NameSpace。目前的样式可以在
src\nhibernate-mapping-2.2.xsd里找到。
提示:想使IntelliSense 能映射和配置文件,拷贝合适的.xsd文件到
<VS.NET installation directory>\Common7\Packages\schemas\xml里。

2. hibernate-mapping

这个元素有许多可选的属性。The schema attribute specifies that tables referred to by this mapping belong to the named schema。(schema属性指点表用我们指点的Schema)如果指点,表的命名将被要求按指点的Schema。如果没有指点,表名将没有限制。default-cascade属性指点当没有指点一个Cascade时,属性和集合将有什么样的默认值。auto-import属性的默认值,使我们在查询语句里能用任何的名称。Assemblynamespace指点持久化类的命名空间和程序集名称。

<hibernate-mapping

         schema="schemaName"                          (1)

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

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

         assembly="Eg"                                (4)

         namespace="Eg"                               (5)

 />

(1)       schema(可选):数据库Schema的名称。(不明白啥意思Ing。。)

(2)       default-cascade(可选-默认值是None)。不名称啥意思。

(3)       auto-import(可选-默认值是True)不明白。Specifies whether we can use unqualified class names (of classes in this mapping) in the query language.(指点我们在查询时怎么用类的名称,还不是很明白。)

(4)       assembly and namespace(可选):为映射文件的类指点程序集和命名空间。

如果你没有指点AssemblyNameSpace那么你就要为指定全称的类名。(包括程序集和命名空间,这样Nhibernate才能找到要映射的类。)

如果你有二个类的名称一样,那么你一定要设置auto-importFalse,这样Nhibernate才不会出错。

3.Class

你可以用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)

        select-before-update="true|false"             (9)

        polymorphism="implicit|explicit"              (10)

        where="arbitrary sql where condition"         (11)

        persister="PersisterClass"                    (12)

        batch-size="N"                                (13)

        optimistic-lock="none|version|dirty|all"      (14)

        lazy="true|false"                             (15)

/>

 

posted @ 2007-03-30 16:46  南守拥  阅读(583)  评论(2编辑  收藏  举报