nhibernate映射关系(转http://blog.csdn.net/nileel/article/details/3473866)

Coordinator
Nov 16, 2011 at 2:19 AM

基本值类型(Basic value types)

基本的值类型大致可以粗糙的分为三组:System.ValueType类型,System.Object类型和支持大对象的System.Object类型.和.NET类型一样,System.ValueType对应的列不能存储null值,而System.Object可以.

表4.3 System.ValueType 映射类型

NHibernate 类型 .NET 类型 Database 类型 备注
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 -忽略毫秒 在没有指定类型(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 - 一个字符,'T' 或者'F'

type="TrueFalse" 必须被指定
YesNo System.Boolean DbType.AnsiStringFixedLength - 一个字符,'Y' 或者'N' type="YesNo"必须被指定

表4.4 System.Object 映射类型

NHibernate 类型 .NET 类型 Database 类型 备注
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) 属性时的默认值

表4.5 Large Object 映射类型

NHibernate 类型 .NET 类型 Database 类型 备注
StringClob System.String DbType.String type="StringClob" 必须被指定.整个字段被读入内存
BinaryBlob System.Byte[] DbType.Binary type="BinaryBlob" 必须被指定. 整个字段被读入内存
Serializable

任何被标记了可序列化属性(SerializableAttribute)的System.Object.

DbType.Binary type="Serializable" 应该被指定. 如果不能为属性找到NHibernate类型,这是最后可依靠的类型。

要掌握NHibernate或者使用某种工具生成NHibernate的hbm.xml文件,应该了解这是一个NHibernate类型名的完整的层。type="integer"被映射为Int32NHibernateType,type="short"被映射为Int16NHibernateType.查看所有的转换你可以查看NHibernate.Type.TypeFactory类的静态构造函数.

 

三、NHibernate的类型

  3.1 值类型映射表

 

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"必须被指定。

 

 

 

  3.2 应用类型映射表

 

 

 

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.3 二进制类型映射表

 

 

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类型,这是最后可依靠的类型。