實體與數據庫的Xml映射標籤-NHibernate入門到精通系列6

NHibernate開發,必經階段:需要實體與Xml映射,本節重點介紹這塊內容。

對於開發新手,掌握如何將數據庫與Xml映射,是不可切少的,下面開始介紹:

一:何爲NHibernate映射?

其實說白了,就是在數據庫和實體之間,放多一個外置存儲介質Xml,來鏈接兩者的關係,當數據庫發生變化時,通過修改Xml配置,達到映射的切換,從而不需要修改代碼。


讓我們看一個簡單的數據庫和實體間映射的Xml:

<?xml version="1.0" encoding="utf-8" ?>

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="Domain" namespace="Domain">
  <class name="類名" table="表名" lazy="true" >
    <id name="ID" column="ID" type="int" >
      <generator class="assigned" />
    </id>
    <property name="Name" type="string">
      <column name="Name" length="51"/>
    </property>

  </class>
</hibernate-mapping>

其實也是很簡單的,基本由於表或字段太多,這種映射通常需要藉助NHibernate工具來生成!

二:NHibernate映射標籤

其實就是對上面的映射Xml的各種意義的解釋:

1:我們首看根節點,當然下面的內容比上面的詳細:hibernate-mapping標籤

<hibernate-mapping                                 
schema="schemaName"                     數據庫schema名稱

default-cascade="none|save-update"      級聯風格(默認 none)

auto-import="true|false"           查詢語句是否可以使用非全限定名  

assembly="AssemblyName"                 映射文件的類的dll名稱               

namespace="Namespace"             映射文件的類的名稱空間名      

  />

2:NHibernate class 標籤


<class                                              
name="ClassName"    類的全名。
table="tableName"   數據庫表名。
discriminator-value="discriminator_value"     區分不同的子類值的辨別值,多態行爲時使用。
mutable="true|false"                          類的實例是否可變。
schema="owner"                                覆蓋在根元素中指定的schema名字。
proxy="ProxyInterface"                        代理類的名稱。
dynamic-update="true|false"                   動態生成Update語句。
dynamic-insert="true|false"                   動態生成Insert語句。
select-before-update="true|false"             更新前先Select一下
polymorphism="implicit|explicit"              隱式查詢或顯式查詢。
where="arbitrary sql where condition"         附加WHERE 條件,在語句中會自動加上。
persister="PersisterClass"                    定製IClassPersister。
batch-size="N"                                批次讀取數量[默認1]。
optimistic-lock="none|version|dirty|all"      鎖定策略。
lazy="true|false"                             是否延遲加載。
abstract="true|false"                         是否抽象類。
  />

3:NHibernate ID標籤

<id                                            

name="PropertyName"                           實體屬性名稱。
type="typename"                               NHibernate類型名稱
column="column_name"                          數據庫字段名稱。
unsaved-value="any|none|null|id_value"        實例是否不保存。
access="field|property|nosetter|ClassName"    NHibernate用來訪問屬性值的策略。
<generator class="generatorClass"/>
</id>

4:NHibernate property標籤

<property
name="propertyName"                        
實體屬性名稱
column="column_name"                       
數據庫字段名稱
type="typename"                            
NHibernate類型名稱
update="true|false"                         是否Update時包含該字段。
insert="true|false"                         是否Insert時包含該字段。
formula="arbitrary SQL expression"          SQL表達式,定義了這個計算屬性的值
access="field|property|ClassName"           NHibernate訪問屬性值的策略
optimistic-lock="true|false"                   樂觀鎖定策略
generated="never|insert|always"             屬性值是否是由數據庫生成
  />

三:NHibernate映射類型

1:NHibernate值類型映射

 

NHibernate類型

.NET類型

Database類型

備註

AnsiChar

System.Char

DbType.AnsiStringFixedLength - 1 char

 

Boolean

System.Boolean

DbType.Boolean

在沒有指定類型(type) 屬性時的默認值。

Byte

System.Byte

DbType.Byte

在沒有指定類型(type) 屬性時的默認值。

Char

System.Char

DbType.StringFixedLength - 1 char

在沒有指定類型(type) 屬性時的默認值。

DateTime

System.DateTime

DbType.DateTime - ignores the milliseconds

在沒有指定類型(type) 屬性時的默認值。

Decimal

System.Decimal

DbType.Decimal

在沒有指定類型(type) 屬性時的默認值。

Double

System.Double

DbType.Double

在沒有指定類型(type) 屬性時的默認值。

Guid

System.Guid

DbType.Guid

在沒有指定類型(type) 屬性時的默認值。

Int16

System.Int16

DbType.Int16

在沒有指定類型(type) 屬性時的默認值。

Int32

System.Int32

DbType.Int32

在沒有指定類型(type) 屬性時的默認值。

Int64

System.Int64

DbType.Int64

在沒有指定類型(type) 屬性時的默認值。

PersistentEnum

System.Enum

潛在類型對應的DbType

不用在映射文件指定type="PersistentEnum".而是提供枚舉的程序集全名, 讓NHibernate用反射來猜測類型。枚舉使用的潛在類型決定適當的DbType.。

Single

System.Single

DbType.Single

在沒有指定類型(type) 屬性時的默認值。

Ticks

System.DateTime

DbType.Int64

type="Ticks"必須被指定。

TimeSpan

System.TimeSpan

DbType.Int64

在沒有指定類型(type) 屬性時的默認值。

Timestamp

System.DateTime

DbType.DateTime - 取決於數據庫支持

type="Timestamp"必須被指定。

TrueFalse

System.Boolean

DbType.AnsiStringFixedLength - 一個字符,'Y' 或者'N'

type="TrueFalse"必須被指定。

YesNo

System.Boolean

DbType.AnsiStringFixedLength - 一個字符,'Y' 或者'N'

type="YesNo"必須被指定。


2:NHibernate應用類型映射

NHibernate Type

.NET Type

Database Type

Remarks

AnsiString

System.String

DbType.AnsiString

type="AnsiString"必須被指定。

CultureInfo

System.Globalization.CultureInfo

DbType.String - 表明文化(culture)的5個字符

在沒有指定類型(type) 屬性時的默認值。

Binary

System.Byte[]

DbType.Binary

在沒有指定類型(type) 屬性時的默認值。

Type

System.Type

DbType.String 保存應用程序集權限定名。

在沒有指定類型(type) 屬性時的默認值。

String

System.String

DbType.String

在沒有指定類型(type) 屬性時的默認值。

 

3:NHibernate二進制類型映射

NHibernate Type

.NET Type

Database Type

Remarks

StringClob

System.String

DbType.String

type="StringClob"必須被指定。 整個字段在內存裏可讀。

BinaryBlob

System.Byte[]

DbType.Binary

type="BinaryBlob"必須被指定。 整個字段在內存裏可讀。

Serializable

Any System.Object 必須標註可序列化標籤

DbType.Binary

type="Serializable" 應該被指定. 如果不能爲屬性找到NHibernate類型,這是最後可依靠的類型。


NHibernate總結:

本節主要介紹了NHibernate開發中的實體與Xml映射的相關知識。

也是一個可查文檔資料,在開發過程中可多多參考,有助於您的開發!

發佈了45 篇原創文章 · 獲贊 4 · 訪問量 38萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章