基本的值类型大致可以粗糙的分为三组: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类的静态构造函数.
顶部