Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2026373
  • 博文数量: 414
  • 博客积分: 10312
  • 博客等级: 上将
  • 技术积分: 4921
  • 用 户 组: 普通用户
  • 注册时间: 2007-10-31 01:49
文章分类

全部博文(414)

文章存档

2011年(1)

2010年(29)

2009年(82)

2008年(301)

2007年(1)

分类:

2008-07-21 15:59:18

持久化类(Persistent Classes)

目录

POCO 简单示例
为持久化字段声明访问器(getters 和 setters)
实现一个默认的构造方法(constructor)
提供一个标识属性(identifier property)(可选)
建议使用不是sealed的类 (可选)
实现继承(Inheritance)
实现Equals()GetHashCode()
持久化生命周期(Lifecycle)中的回调(Callbacks)
合法性检查(Validatable)回调
用属性替代 XML

持久化类是应用程序用来解决商业问题的类(比如,在电子交易程序中的Customer和Order)。持久化类,就如同它的名字暗示的,是短暂存在的,它的实例会被持久性保存于数据库中。

如果这些类符合简单的规则,NHibernate能够工作得最好,这些规则就是Plain Old CLR Object (POJO,简单传统CLR对象)编程模型。

POCO 简单示例

用一个类描述一只猫。

 

public class Cat
{
private long _id; // identifier
private string _name;
private DateTime _birthdate;
private Cat _mate;
private Set _kittens;
private Color _color;
private char _sex;
private float _weight;
public long Id
{
get { return _id; }
set { _id = value; }
}

public string Name
{
get { return _name; }
set { _name = value; }
}

public DateTime Birthdate
{
get { return _birthdate; }
set { _birthdate = value; }
}

public Cat Mate
{
get { return _mate; }
set { _mate = value; }
}

public Set Kittens
{
get { return _kittens; }
set { _kittens = value; }
}

public Color Color
{
get { return _color; }
set { _color = value; }
}

public char Sex
{
get { return _sex; }
set { _sex = value; }
}

public float Weight
{
get { return _weight; }
set { _weight = value; }
}

}





有四条主要的规则:

为持久化字段声明访问器(getters 和 setters)

Cat为它的所有可持久化字段声明了getters 和 setters访问器。用访问器来替代直接访问字段是个好习惯。然而也可以通过字段(field)来使用NNHibernate。

属性不一定需要声明为public的。NHibernate可以对default,procted, internal, or private的属性一视同仁地执行持久化。

实现一个默认的构造方法(constructor)

Cat有一个显式的无参数默认构造方法。所有的持久化类都必须具有一个默认的构造方法(可以不是public的),这样的话NHibernate就可以使用Constructor.Invoke()来实例化它们。

提供一个标识属性(identifier property)(可选)

 

建议使用不是sealed的类 (可选)

 

实现继承(Inheritance)

 

实现Equals()GetHashCode()

 

持久化生命周期(Lifecycle)中的回调(Callbacks)

 

合法性检查(Validatable)回调

 

用属性替代 XML



阅读(1298) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~