Nhibernate开发专题博客

Nhibernate开发专题博客,为您精选Nhibernate开发教程,助您开发愉快!

公告信息
欢迎光临Nhibernate开发专题博客,祝您开发愉快!
文章档案

实体与数据库的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映射的相关知识。

也是一个可查文档资料,在开发过程中可多多参考,有助于您的开发!


新浪微博粉丝精灵,刷粉丝、刷评论、刷转发、企业商家微博营销必备工具"

2011/9/7 14:15:07 | Nhibernate从入门到精通系列 | |

  • 发表评论