NHibernate 基本值类型
来源:互联网 发布:淘宝全网举报中心 编辑:程序博客网 时间:2024/05/17 20:32
基本值类型(Basic value types)
基本的值类型大致可以粗糙的分为三组:System.ValueType
类型,System.Object
类型和支持大对象的System.Object
类型.和.NET类型一样,System.ValueType对应的列不能存储null
值,而System.Object可以.
表4.3 System.ValueType 映射类型
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 映射类型
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 映射类型
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"
被映射为Int32
NHibernateType,type="short"
被映射为Int16
NHibernateType.查看所有的转换你可以查看NHibernate.Type.TypeFactory
类的静态构造函数.
自定义值类型(Custom value types)
开发者创建属于他们自己的值类型也是很容易的。比如说,你可能希望持久化Int64
类型的属性,持久化成为VARCHAR
字段。NHibernate没有内置这样一种类型。自定义类型能够映射一个属性(或集合元素)到不止一个数据库表字段。比如说,你可能有这样的属性:Name {get; set;}
,这是String
类型的,对应的持久化到三个字段:FIRST_NAME
,INITIAL
, SURNAME
。
要实现一个自定义类型,可以实现NHibernate.IUserType
或NHibernate.ICompositeUserType
中的任一个,并且使用类型的全限定类名来声明属性。请查看NHibernate.DomainModel.DoubleStringType
这个例子,看看它是怎么做的。
<property name="TwoStrings" type="NHibernate.DomainModel.DoubleStringType, NHibernate.DomainModel"><column name="first_string"/><column name="second_string"/></property>
注意使用<column>
标签来把一个属性映射到多个字段的做法。
虽然NHibernate内置的丰富类型和对component的支持意味着你可能很少需要使用自定义类型,至少对于你程序中经常出现的自定义类(并非实体)来说,这是一种好方法。比如说,MonetoryAmount
(价格总额)对比使用ICompositeUserType
来说更好,虽然它可以很容易的使用一个component实现。这样做的动机之一是抽象。通过自定义类型,以后假若你改变表示金额值的方法时,你的映射文件不需要更改,这就得到了保护。
映射到"任意"(any)类型
TODO
SQL中引号包围的标识符
你可强制NHibernate在生成的SQL中把标识符用引号前后包围起来,这需要在映射文档中使用反向引号(`)把表名或者字段名包围(可能比较拗口,请看下面的例子)。NHibernate会使用相应的SQLDialect
(方言)来使用正确的引号风格(通常是双引号,但是在SQL Server中是括号,MySQL中是反向引号)。
<class name="LineItem" table="`Line Item`"><id name="id" column="`Item Id`"><generator class="assigned"/></id><property name="itemNumber" column="`Item #`"/>...</class>
映射文件的模块化(Modular mapping files)
允许在独立的映射文档中定义subclass
和joined-subclass
,直接位于hibernate-mapping
下。这就可以让你每次扩展你的类层次的时候,加入新的映射文件就行了。在子类的映射中你必须指定一个extends
属性,指明先前已经映射过的超类。如果你使用嵌入的资源(Embedded Resources)配置NHibernate, hbm.xml文件会自动配置为正确的顺序.如果手动添加或者在cfg.xml文件中指定它们,映射文件的排序是非常重要的!
<hibernate-mapping><subclass name="Eg.Subclass.DomesticCat, Eg" extends="Eg.Cat, Eg" discriminator-value="D"><property name="Name" type="String"/></subclass></hibernate-mapping>
- NHibernate 基本值类型
- NHibernate 基本值类型
- NHibernate 基本使用
- NHibernate基本应用程序配置
- SSH:NHibernate的基本使用
- [转载]NHibernate的基本用法
- NHibernate 基本配置 (第一篇)
- hibernate基本值类型
- Hibernate基本值类型
- c# 基本值类型
- 基本类型值和引用类型值
- java-值传递-基本类型/对象类型
- 基本类型和引用类型的值
- NHibernate日期类型的映射(转)
- fluent nhibernate映射的数值类型问题
- Nhibernate实现类似 BeanPropertyRowMapper 的类型映射
- 理解基本基本类型和引用类型的值
- NHibernate的权限系统,基本完成。
- JAVA输入输出流详解
- IAR--Fatal Error[Lc002]: could not open file "*\build\config files\512KB_Pflash.icf" 的解决方法
- Ubuntu常用软件 --- 截图
- Python数据结构:序列(列表[]、元组())与映射(字典{})语法总结
- 关键词有排名需要具备的条件
- NHibernate 基本值类型
- 题目1184:二叉树遍历
- opencv 人脸识别 (一)训练样本的处理
- 导数据常用处理
- CGIC简明教程目录(CGI篇)
- js之浏览器对象
- 面向对象……未完待续
- visual studio TFS查看提交历史记录
- cin.get( )与cin.getline( )的区别