博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[NHibernate]持久化类(Persistent Classes)
阅读量:6367 次
发布时间:2019-06-23

本文共 1916 字,大约阅读时间需要 6 分钟。

系列文章

引言

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

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

POCO简单示例

用一个类描述一只猫:

1     public class Cat 2     { 3         private long _id; // identifier 4         private string _name; 5         private DateTime _birthdate; 6         private Cat _mate; 7         private char _sex; 8         private float _weight; 9         public long Id10         {11             get { return _id; }12             set { _id = value; }13         }14         public string Name15         {16             get { return _name; }17             set { _name = value; }18         }19         public DateTime Birthdate20         {21             get { return _birthdate; }22             set { _birthdate = value; }23         }24         public Cat Mate25         {26             get { return _mate; }27             set { _mate = value; }28         }29         public char Sex30         {31             get { return _sex; }32             set { _sex = value; }33         }34         public float Weight35         {36             get { return _weight; }37             set { _weight = value; }38         }39 40     }

四条原则

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

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

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

实现一个默认的构造函数(Constructor)

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

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

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

实现继承(Inheritance)

实现Equals()和GetHashCode()

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

合法性检查(Validatable)回调

用属性替代XML

总结

本文介绍了持久化类的几条规则。

本文来自

《NHibernate中文文档》

博客地址:
博客版权: 本文以学习、研究和分享为主,欢迎转载,但必须在文章页面明显位置给出原文连接。
如果文中有不妥或者错误的地方还望高手的你指出,以免误人子弟。如果觉得本文对你有所帮助不如【推荐】一下!如果你有更好的建议,不如留言一起讨论,共同进步!
再次感谢您耐心的读完本篇文章。
转载:http://www.cnblogs.com/wolf-sun/p/3704012.html
你可能感兴趣的文章
使用travis-ci自动部署Hexo到github和coding
查看>>
一个完整小巧的Redux全家桶项目
查看>>
at()函数改变图像的对比度和亮度(openCV)(4)
查看>>
javascript数据类型判断方法
查看>>
sublime插件问题
查看>>
mysql中的max_allowed_packet参数
查看>>
《进击的虫师》爬取豆瓣电影海报(Top250)
查看>>
Klog - 利用Kotlin的类扩展,为你的log输出带来无限遐想
查看>>
js 实现链式调用命名空间
查看>>
Ali-HBase的SQL实践与改进
查看>>
常见Serialize技术探秘(ObjectXXStream、XML、JSON、JDBC byte编码、Protobuf)
查看>>
Java架构-高并发的解决方案
查看>>
CSS技巧总结2
查看>>
springboot无法注入公共模块类的问题
查看>>
React Native代码提示工具
查看>>
10分钟讲解次贷危机
查看>>
TableViewCell的复用
查看>>
HTTP全解析
查看>>
MYSQL中视图的使用
查看>>
如何在NEO共识节点间分配任务
查看>>