NHIBERNATE之映射文件配置说明(转载4)
二十、自定义值类型
要实现一个自定义类型,可以实现NHibernate.UserTypes.IUserType或NHibernate.UserTypes.ICompositeUserType中的任一个, 并且使用类型的全限定类名来定义属性。请查看 NHibernate.DomainModel.DoubleStringType这个例子,看看它是怎么做的。
- <property name="TwoStrings" type="NHibernate.DomainModel.DoubleStringType, NHibernate.DomainModel">
- <column name="first_string"/>
- <column name="second_string"/>
- </property>
注意使用<column>标签来把一个属性映射到多个字段的做法。
ICompositeUserType, IEnhancedUserType, INullableUserType, IUserCollectionType, 和 IUserVersionType接口为更特殊的使用方式提供支持。
你甚至可以在一个映射文件中提供参数给一个IUserType。 为了这样做, 你的UserType必须实现NHibernate.UserTypes.IParameterizedType接口。为了给自定义类型提供参数,你可以在映射文件中使用<type>元素。
- <property name="priority">
- <type name="MyCompany.UserTypes.DefaultValueIntegerType">
- <param name="default">0</param>
- </type>
- </property>
现在,IUserType 可以从传入的IDictionary对象中得到default 参数的值。
尽管 NHibernate 内建的丰富的类型和对组件的支持意味着你可能很少 需要使用自定义类型。不过, 为那些在你的应用中经常出现的(非实体)类使用自定义类型也是一个好方法。例如, 一个MonetaryAmount类使用ICompositeUserType来映射是不错的选择,虽然他可以很容易地被映射成组件。这样做的动机之一是抽象。使用自定义类型,以后假若你改变表示金额的方法时,它可以保证映射文件不需要修改。
二十一、任意(Any)类型映射
meta-type属性使得应用程序能指定一个将数据库字段的值映射到持久化类的自定义类型。 这个持久化类包含有用id-type指定的标识符属性。 你必须指定从meta-type的值到类名的映射。
- <any name="being" id-type="Int64" meta-type="string">
- <meta-value value="TBL_ANIMAL" class="Animal"/>
- <meta-value value="TBL_HUMAN" class="Human"/>
- <meta-value value="TBL_ALIEN" class="Alien"/>
- <column name="table_name"/>
- <column name="id"/>
- </any>
NHibernate也支持meta-type="class"标签,这个例子里meta-value不是必须的, 因为 meta-value就是持久化类名(persistentClass.FullName)。
- <any name="being" id-type="Int64" meta-type="class">
- <column name="table_name"/>
- <column name="id"/>
- </any>
但你使用meta-type="class"在查询语句里设置参数时,你必须使用下面的代码:
- SetParameter("paramName", typeof(YourClass).FullName, NHibernateUtil.ClassMetaType)
映射文件部分:
- <any
- name="propertyName" (1)
- id-type="idtypename" (2)
- meta-type="metatypename" (3)
- cascade="cascade_style" (4)
- access="field|property|ClassName" (5)
- optimistic-lock="true|false" (6)
- >
- <meta-value ... />
- <meta-value ... />
- .....
- <column .... />
- <column .... />
- .....
- </any>
说明:
(1) |
name: 属性名。 |
(2) |
id-type: 标识符类型。 |
(3) |
meta-type (可选 -默认是 string): 允许辨别标志(discriminator)映射的任何类型。 |
(4) |
cascade (可选 -默认是none): 级联的类型。 |
(5) |
access (可选 -默认是 property): NHibernate 用来访问属性值的策略。 |
(6) |
optimistic-lock (可选 -默认是 true): 表明更新此组件是否需要获取乐观锁。换句话说,当这个属性变脏时,是否增加版本号(Version) 。 |
二十二、SQL中引号包围的标识符
- <class name="LineItem" table="`Line Item`">
- <id name="Id" column="`Item Id`"/><generator class="assigned"/></id>
- <property name="ItemNumber" column="`Item #`"/>
- ...
- </class>
二十三、模块化映射文件
- <hibernate-mapping>
- <subclass name="Eg.Subclass.DomesticCat, Eg"
- extends="Eg.Cat, Eg" discriminator-value="D">
- <property name="name" type="string"/>
- </subclass>
- </hibernate-mapping>
二十四、数据库生成属性(Generated Properties)
被标明为generated的属性还必须是 non-insertable和 non-updateable的。只有(version)(可选),时间戳 (可选)和属性可以被标明为generated。
- never (默认) 标明此属性值不是从数据库中生成。
- insert - 标明此属性值在insert的时候生成,但是不会在随后的update时重新生成。比如说创建日期就归属于这类。
- always - 标明此属性值在insert和update时都会被生成。
二十五、数据库辅助对象
第一种模式是在映射文件中显式声明CREATE和DROP命令:
- <nhibernate-mapping>
- ...
- <database-object>
- <create>CREATE TRIGGER my_trigger ...</create>
- <drop>DROP TRIGGER my_trigger</drop>
- </database-object>
- </nhibernate-mapping>
第二种模式是提供一个类,这个类知道如何组织CREATE和DROP命令。这个特别类必须实现NHibernate.Mapping.IAuxiliaryDatabaseObject接口。
- <hibernate-mapping>
- ...
- <database-object>
- <definition class="MyTriggerDefinition, MyAssembly"/>
- </database-object>
- </hibernate-mapping>
你也可以在配置文件里设置参数传给数据库对象。
- <hibernate-mapping>
- ...
- <database-object>
- <definition class="MyTriggerDefinition, MyAssembly">
- <param name="parameterName">parameterValue</param>
- </definition>
- </database-object>
- </hibernate-mapping>
NHibernate可以调用IAuxiliaryDatabaseObject.SetParameterValues方法接受dictionary参数。
还有,这些数据库对象可以特别指定为仅在特定的方言中才使用。
- <hibernate-mapping>
- ...
- <database-object>
- <definition class="MyTriggerDefinition"/>
- <dialect-scope name="NHibernate.Dialect.Oracle9Dialect"/>
- <dialect-scope name="NHibernate.Dialect.OracleDialect"/>
- </database-object>
- </hibernate-mapping>
NHIBERNATE之映射文件配置说明(转载4)的更多相关文章
- NHibernate之映射文件配置说明
NHibernate之映射文件配置说明 1. hibernate-mapping 这个元素包括以下可选的属性.schema属性,指明了这个映射所引用的表所在的schema名称.假若指定了这个属性, 表 ...
- NHibernate之映射文件配置说明(转载3)
十二.组件(component), 动态组件(dynamic-component) <component>元素把子对象的一些元素与父类对应的表的一些字段映射起来. 然后组件可以定义它们自己 ...
- NHibernate之映射文件配置说明(转载1)
源博客:http://www.cnblogs.com/kissdodog/archive/2013/02/21/2919886.html 1. hibernate-mapping 这个元素包括以下可选 ...
- [转]NHibernate之映射文件配置说明
1. hibernate-mapping 这个元素包括以下可选的属性.schema属性,指明了这个映射所引用的表所在的schema名称.假若指定了这个属性, 表名会加上所指定的schema的名字扩展为 ...
- NHibernate之映射文件配置说明(转载2)
六.鉴别器 在"一棵对象继承树对应一个表"的策略中,<discriminator>元素是必需的, 它定义了表的鉴别器字段. 鉴别器字段包含标志值,用于告知持久化层应 ...
- NHibernate初入门之映射文件配置说明(三)
转载逆心http://www.cnblogs.com/kissdodog/archive/2013/02/21/2919886.html 1. hibernate-mapping 这个元素包括以下可选 ...
- NHibernate之映射文件配置说
1. hibernate-mapping 这个元素包括以下可选的属性.schema属性,指明了这个映射所引用的表所在的schema名称.假若指定了这个属性, 表名会加上所指定的schema的名字扩展为 ...
- 使用代码辅助生成工具CodeSmith -- 生成NHibernate的映射文件
首先下载CodeSmith工具:在百度云中,在CodeSmith文件夹中. 安装,使用激活工具激活. 然后下载NHibernate模板,也是在百度云中,在CodeSmith文件夹中. 之后直接点击NH ...
- 使用CodeSmith快速生成映射文件和映射类
一 CodeSmith简介 本文以表自动生成NHibernate的映射文件和映射类的实例来说明一下本软件的使用方法. CodeSmith是一种基于模板的代码生成工具,其使用类似于ASP.NET的语法来 ...
随机推荐
- 关于<%@ include file=" " %>与<jsp:include page=""></jsp:include>中的那些问题?
今天在使用<%@ include file=" " %>指令时,竟然在页面中不让使用?这是怎么回事:问题如下图: 顿时被这个问题给搞到了!!!突然想到在以前的 JSP ...
- oracle单行函数之通用函数
NVL (a,b) --当a=null时,返回b,否则返回a NVL2 (a, b, c) -- 当a=null时,返回c,否则返回b NULLIF (expr1, expr2) --当a=b时,返回 ...
- android 手机信息获取
1. adb已安装 2. adb shell getprop 此时已列出所有相关信息
- phpcms V9 修改生成静态文件路径/html
在论坛看到部分用户反馈这个问题,要修改的其实是html_root的值,默认是"/html"如果要生成在网站根目录的话,这个值则要为空.论坛上现在看到的办法是打开caches\con ...
- Windows下安装Emacs+Sbcl+Slime
前言 其实网上已经有很多类似的文章了,我也是按照上面的来做.在做的过程中会遇到几个很坑的地方,我自己也是折腾了好久才弄好.所以现在写出来希望能对大家有所帮助. 正文 下载和安装Emacs http:/ ...
- 『C # 开发』技能 Get√ ——制作CMD界面的简单GIF图片
今天看到C#课本上个列子把星号(*)有规则打印在控制台中间位置 程序不难,利用的是光标定位函数Console.SetCursorPosition(x, y)做到的 心想是不是弄出一个动态的图案比较好玩 ...
- ural 1723 Sandro's Book
http://acm.timus.ru/problem.aspx?space=1&num=1723 #include <cstdio> #include <cstring&g ...
- Printing Architecture
Printing Architecture http://www.codeproject.com/Articles/8916/Printing-Architecture This articl ...
- Android 使用Application总结
Application 配置全局Context 第一步.写一个全局的单例模式的MyApplication继承自Application 覆盖onCreate ,在这个方法里面实例化Application ...
- 排序功能实现 jQuery实现排序 上移 下移
效果 思路, 跟相邻元素,互换sort. 前提是每一个元素都有自己的sort值,不为零. <tr id="{sh:$vo.id}"> <td> <sp ...