Basic OR Mapping

it2022-05-09  29

对象和关系的映射被定义在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属性的默认值,使我们在查询语句里能用任何的名称。Assembly和namespace指点持久化类的命名空间和程序集名称。

<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-import为False,这样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)

/>

 

转载于:https://www.cnblogs.com/nanshouyong326/archive/2007/03/30/694217.html


最新回复(0)