[NHibernate]Nullables

系列文章


[Nhibernate]体系结构

[NHibernate]ISessionFactory配置

[NHibernate]持久化类(Persistent
Classes)

[NHibernate]O/R
Mapping基础

[NHibernate]集合类(Collections)映射 

[NHibernate]关联映射

[NHibernate]Parent/Child

[NHibernate]缓存(NHibernate.Caches)

[NHibernate]NHibernate.Tool.hbm2net

什么是Nullables?

Nullables是NHibrnate的附加软件,它是Donald L Mull Jr.(aka
luggage)贡献的,大部分数据库系统允许基本类型(int或bool)为null。这意味着一个boolean列可能有0,1或者是null值,null和0有不同的含义。但是在.NET
1.x这是不能实现的;一个bool不是true就是false。

Nullables使得在NHibernae中nullable的基本类型成为可能。注意,.NET2.0已经有了这个特性。

如何使用?

这是一个简单的例子,它使用了Nullables.NullableDateTime来(可选择)保存一个人的生日。


 1 public class Person
2 {
3 int _id;
4 string _name;
5 Nullables.NullableDateTime _dateOfBirth;
6 public Person()
7 {
8 }
9 public int Id
10 {
11 get { return this._id; }
12 }
13 public string Name
14 {
15 get { return this._name; }
16 set { this._name = value; }
17 }
18 public Nullables.NullableDateTime DateOfBirth
19 {
20 get { return this._dateOfBirth; }
21 set { this._dateOfBirth = value; }
22 }
23 }

如你所见,DateOfBirth是Nullables.NullableDateTime类型(而不是System.DateTime)。这里是映射


 1 <?xml version="1.0" encoding="utf-8" ?>
2 <hibernate-mapping xmlns="urn:nhibernate-mapping-2.0">
3 <class name="Example.Person, Example" table="Person">
4 <id name="Id" access="field.camelcase-underscore" unsaved-value="0">
5 <generator class="native" />
6 </id>
7 <property name="Name" type="String" length="200" />
8 <property name="DateOfBirth" type="Nullables.NHibernate.NullableDateTimeType, Nullables.NHibernate" />
9 </class>
10 </hibernate-mapping>

重点

在这个映射中,DateOfBirth的类型必须是Nullables.NHibernate.NullableDateTimeType。注意NHibernate.Mapping.Attributes会自动处理它。
Nullables.NHibernate.NullableXXXType是用来转换Nullables
类型到数据库的包装类。

这里是这个例子的部分代码:


1 Person per = new Person();
2 textBox1.Text = per.DateOfBirth.Value.ToString() // will throw an exception when there is no value.
3 textBox1.Text = per.DateOfBirth.ToString() // will work. it will return an empty string if there is no value.
4 textBox1.Text = (per.DateOfBirth.HasValue ? per.DateOfBirth.Value.ToShortDateString() : "Unknown") // friendly message
5 per.DateOfBirth = new System.DateTime(1979, 11, 8); // implicit cast from the "plain" System.DateTime.
6 per.DateOfBirth = new NullableDateTime(new System.DateTime(1979, 11, 8)); // the long way.
7 per.DateOfBirth = null; // this works.
8 per.DateOfBirth = NullableDateTime.Default; // this is more correct.

本文来自《NHibernate 中文文档》

时间: 2025-01-02 13:49:37

[NHibernate]Nullables的相关文章

[NHibernate]存储过程的使用(三)

目录 写在前面 文档与系列文章 查询 总结 写在前面 前面的文章介绍了在nhibernate中使用存储过程进行增删改的操作,当然查询也是可以的,在nhibernate中也可以执行任意的存储过程.本篇文章将介绍如何使用查询的存储过程的方式. 文档与系列文章 [Nhibernate]体系结构 [NHibernate]ISessionFactory配置 [NHibernate]持久化类(Persistent Classes) [NHibernate]O/R Mapping基础 [NHibernate]

[NHibernate]立即加载

目录 写在前面 文档与系列文章 立即加载 一个例子 总结 写在前面 上篇文章介绍了nhibernate延迟加载的相关内容,简单回顾一下延迟加载,就是需要的时候再去加载,需要的时候再向数据库发出sql指令进行查询. 本篇文章介绍的立即加载,则和延迟加载相对,举个简单的例子,就是查询客户信息,则会将该客户相关联的数据立即进行加载.实现立即加载的方式有三种:设置映射文件中节点的可选属性lazy,Nhibernate提供的实用类,HQL抓取策略. 文档与系列文章 [Nhibernate]体系结构 [NH

[NHibernate]延迟加载

目录 写在前面 文档与系列文章 延迟加载 一个例子 总结 写在前面 上篇文章介绍了多对多关系的关联查询的sql,HQL,Criteria查询的三种方式.本篇文章将介绍nhibernate中的延迟加载方式,延迟加载按个人理解也可以叫做按需要加载(Loading-on-demand). 文档与系列文章 [Nhibernate]体系结构 [NHibernate]ISessionFactory配置 [NHibernate]持久化类(Persistent Classes) [NHibernate]O/R

[NHibernate]增删改操作

目录 写在前面 文档与系列文章 添加数据 删除数据 修改数据 添加修改数据 总结 写在前面 上篇文章介绍了nhibernate的基于面向对象的条件查询.对一个项目来说,增删改查是必不可少的,虽然实现方式不同,但是总有涉及到这部分的代码.之前跟朋友说过一个笑话,你要会增删改查了,一切问题就不是问题了,在加上业务处理基本上就完成一个项目了.可能说的是有点过了,但是我觉得在编码中,重要的是你的业务处理能力,在公司很少人能能站在项目框架或者架构的决策的位置,这个时候,作为开发来说不就是负责模块吗?而这些

耗时两月,NHibernate系列出炉

写在前面 这篇总结本来是昨天要写的,可昨天大学班长来视察工作,多喝了点,回来就倒头就睡了,也就把这篇总结的文章拖到了今天. nhibernate系列从开始着手写,到现在前后耗费大概两个月的时间,通过总结这个系列,确实收获不小,这里将本系列的导航,列出放在这里算是对nhibernate系列的一个小总结,也方便想学习nhibernate的朋友查找. nhibernate文档 文档部分是从网上搜集,认为还是比较全面的,就在博客上做了记录,也希望在用到的时候,有个地方可以方便的查找. [Nhiberna

[NHibernate]代码生成器的使用

目录 写在前面 文档与系列文章 代码生成器的使用 总结 写在前面 前面的文章介绍了nhibernate的相关知识,都是自己手敲的代码,有时候显得特别的麻烦,比如你必须编写持久化类,映射文件等等,举得例子比较简单,字段比较少,如果一个数据表有几十个字段,你手敲的话烦都烦死了,不过为了学习nhibernate的语法,初学的过程还是建议自己动手,这样敲的多了就对每个过程,及映射文件中的节点的含义有个大致印象.前面举的例子,你也会发现这种方式的步骤就是首先创建数据库,然后编写持久化类,映射文件,最后编写

[NHibernate]多对多关系(关联查询)

目录 写在前面 文档与系列文章 多对多关系关联查询 总结 写在前面 上篇文章介绍了nhibernate中对一对多关系进行关联查询的几种方式,以及在使用过程需要注意的问题.这篇文章对多对多关系的查询处理也采用上篇文章的描述方式进行说明. 文档与系列文章 [Nhibernate]体系结构 [NHibernate]ISessionFactory配置 [NHibernate]持久化类(Persistent Classes) [NHibernate]O/R Mapping基础 [NHibernate]集合

[NHibernate]一对多关系(关联查询)

目录 写在前面 文档与系列文章 一对多查询 总结 写在前面 上篇文章介绍了nhibernate的一对多关系如何配置,以及级联删除,级联添加数据的内容.这篇文章我们将学习nhibernate中的一对多关系的关联查询.前面文章中也介绍的nhibernate的查询:HQL,条件查询,原生SQL查询. 文档与系列文章 [Nhibernate]体系结构 [NHibernate]ISessionFactory配置 [NHibernate]持久化类(Persistent Classes) [NHibernat

[NHibernate]存储过程的使用(一)

目录 写在前面 文档与系列文章 Nhibernate中使用存储过程 一个例子 总结 写在前面 上篇文章一个小插曲,分析了延迟加载是如何解决N+1 select查询问题的.这篇开始介绍在nhibernate中如何使用存储过程,同时也介绍如何使用代码生成器,提高开发效率. 文档与系列文章 [Nhibernate]体系结构 [NHibernate]ISessionFactory配置 [NHibernate]持久化类(Persistent Classes) [NHibernate]O/R Mapping