nhibernate字段类型映射关系
基本值类型(Basic value types) 基本的值类型大致可以粗糙的分为三组:System.ValueType类型,System.Object类型和支持大对象的System.Object类型.和.NET类型一样,System.ValueType对应的列不能存储null值,而System.Object可以. 表4.3 System.ValueType映射类型 NHibernate 类型 Boolean .NET 类型 Database 类型 备注 在没有指定类型(type) 属性时的默认值 在没有指定类型(type) 属性时的默认值 System.BooleDbType.Boolean an Byte System.Byte DbType.Byte Char 在没有指定类型DbType.StringFixedLength System.Char (type) 属性时的默- 1 char 认值 在没有指定类型System.DateTDbType.DateTime -忽略毫(type) 属性时的默ime 秒 认值 System.DecimDbType.Decimal al System.DoublDbType.Double e 在没有指定类型(type) 属性时的默认值 在没有指定类型(type) 属性时的默认值 在没有指定类型(type) 属性时的默认值 在没有指定类型(type) 属性时的默认值 在没有指定类型(type) 属性时的默认值 在没有指定类型DateTime Decimal Double Guid System.Guid DbType.Guid Int16 System.Int16 DbType.Int16 Int32 Int System.Int32 DbType.Int32 System.Int DbType.Int NHibernate 类型 .NET 类型 Database 类型 备注 (type) 属性时的默认值 不用在映射文件指定type=\"PersistentEnum\".而是提供枚举的程序集全名,让NHibernate用反射来猜测类型。枚举使用的潜在类型决定适当的DbType。 在没有指定类型(type) 属性时的默认值 type=\"Ticks\"必须被指定 在没有指定类型(type) 属性时的默认值 type=\"Timestamp\"必须被指定 一PersistentE个 System.E潜在类型对应的DbType num num Single System.SinglDbType.Single e System.DateTDbType.Int ime System.TimeSDbType.Int pan System.DateTDbType.DateTime - 取决ime 于数据库支持 Ticks TimeSpan Timestamp TrueFalse DbType.AnsiStringFixedLeSystem.Booletype=\"TrueFalse\" ngth- 一个字符,'T' 或者an 必须被指定 'F' DbType.AnsiStringFixedLeSystem.Booletype=\"YesNo\"必须被ngth- 一个字符,'Y' 或者an 指定 'N' YesNo 表4.4 System.Object映射类型 NHibernate 类型 .NET 类型 Database 类型 备注 AnsiStrinSystem.String g DbType.AnsiStrtype=\"AnsiStriing ng\"必须被指定 DbType.String在没有指定类型CultureInSystem.Globalization.Cultur - 表明文化(type) 属性时fo eInfo (culture)的5个的默认值 字符 Binary System.Byte[] 在没有指定类型DbType.Binary (type) 属性时的默认值 NHibernate 类型 Type .NET 类型 Database 类型 备注 System.Type DbType.String在没有指定类型 容纳程序集全(type) 属性时名 的默认值 在没有指定类型DbType.String (type) 属性时的默认值 Database 类型 String System.String 表4.5 Large Object 映射类型 NHibernate 类型 .NET 类型 备注 StringClob System.String type=\"StringClob\" 必DbType.Strin须被指定.整个字段被读g 入内存 type=\"BinaryBlob\" 必DbType.Binar须被指定. 整个字段被y 读入内存 BinaryBlob System.Byte[] type=\"Serializable\" 任何被标记了可序列化应该被指定. 如果不能Serializabl属性DbType.Binar为属性找到NHibernatee (SerializableAttributy 类型,这是最后可依靠的e)的System.Object. 类型。 要掌握NHibernate或者使用某种工具生成NHibernate的hbm.xml文件,应该了解这是一个NHibernate类型名的完整的层。type=\"integer\"被映射为Int32NHibernateType,type=\"short\"被映射为Int16NHibernateType.查看所有的转换你可以查看NHibernate.Type.TypeFactory类的静态构造函数. 三、NHibernate的类型 3.1 值类型映射表 NHibernate类型 AnsiChar Boolean .NET类型 System.Char Database类型 备注 Byte Char DbType.AnsiStringFixedLe ngth - 1 char 在没有指定类型System.BooleaDbType.Boolean (type) 属性时的默认n 值。 在没有指定类型System.Byte DbType.Byte (type) 属性时的默认值。 System.Char DbType.StringFixedLength 在没有指定类型NHibernate类型 .NET类型 Database类型 - 1 char 备注 (type) 属性时的默认值。 在没有指定类型System.DateTiDbType.DateTime - ignores DateTime (type) 属性时的默认me the milliseconds 值。 在没有指定类型System.DecimaDecimal DbType.Decimal (type) 属性时的默认l 值。 在没有指定类型Double System.Double DbType.Double (type) 属性时的默认值。 在没有指定类型Guid System.Guid DbType.Guid (type) 属性时的默认值。 在没有指定类型Int16 System.Int16 DbType.Int16 (type) 属性时的默认值。 在没有指定类型Int32 System.Int32 DbType.Int32 (type) 属性时的默认值。 在没有指定类型Int System.Int DbType.Int (type) 属性时的默认值。 不用在映射文件指定type=\"PersistentEnum\".而是提供枚举的程PersistentEn序集全名, 让System.Enum 潜在类型对应的DbType um NHibernate用反射来猜测类型。枚举使用的潜在类型决定适当的DbType.。 在没有指定类型Single System.Single DbType.Single (type) 属性时的默认值。 System.DateTitype=\"Ticks\"必须被Ticks DbType.Int me 指定。 在没有指定类型System.TimeSpTimeSpan DbType.Int (type) 属性时的默认an 值。 System.DateTiDbType.DateTime - 取决type=\"Timestamp\"必Timestamp me 于数据库支持 须被指定。 NHibernate类型 TrueFalse .NET类型 Database类型 备注 YesNo DbType.AnsiStringFixedLeSystem.Booleatype=\"TrueFalse\"必ngth -一个字符,'Y' 或者n 须被指定。 'N' DbType.AnsiStringFixedLeSystem.Booleatype=\"YesNo\"必须被ngth -一个字符,'Y' 或者n 指定。 'N' 3.2 应用类型映射表 NHibernat.NET Type e Type AnsiStrinSystem.String g Database Type Remarks DbType.AnsiStrtype=\"AnsiStriing ng\"必须被指定。 DbType.String 在没有指定类型CultureInSystem.Globalization.Culture- 表明文化(type) 属性时fo Info (culture)的5个的默认值。 字符 Binary System.Byte[] 在没有指定类型DbType.Binary (type) 属性时的默认值。 DbType.String在没有指定类型 保存应用程序(type) 属性时集权限定名。 的默认值。 在没有指定类型DbType.String (type) 属性时的默认值。 Type System.Type String System.String 3.3 二进制类型映射表 NHibernate .NET Type Type StringClob System.String BinaryBlob System.Byte[] Database Type Remarks type=\"StringClob\"必须被DbType.String 指定。 整个字段在内存里可读。 DbType.Binary type=\"BinaryBlob\"必须被NHibernate .NET Type Type Database Type Remarks 指定。 整个字段在内存里可读。 type=\"Serializable\"应该Any 被指定. 如果不能为属性找Serializable System.Object 必DbType.Binary 到NHibernate类型,这是最须标注可序列化标签 后可依靠的类型。
FluentNHibernate配置方法
使用FluentNHibernate进行配置时,默认可以不指定字段类型。如遇特殊情况可通过以下方式进行指定:
Map(x =>x.SignUpDate).CustomType(\"Timestamp\");
SignUpDate在程序里是“DateTime”类型,默认情况转换时,会忽略毫秒,需要指定“CustomType”为“Timestamp”才可查询出毫秒部分。