既然是一个ORM框架,那么自然是将O这一端映射R上.至于集合,是O这方面最常见,也是R这一边非常容易表示的关系.例如,一个问题(Question)可以包含多个回答(Answer),于是我的代码里就有这样的结构: public class Question { public virtual int QuestionID { get; set; } public virtual string Name { get; set; } private ISet<Answer> m_answers; pu…
之前谈了NHibernate的几个方面,似乎抱怨的居多,不过这次我想谈一下我对Interceptor的感受,则基本上都是好话了.这并不一定是说Interceptor设计的又多么好(事实上它使用起来还是挺麻烦的),但是这的确也是我认为NHibernate超越LINQ to SQL,尤其是Entity Framework的又一个重要方面——因为Entity Framework本身也已经不差了.更重要的是,Interceptor机制让我得以实现我“理想中的”数据访问功能.当然现在只是浅尝辄止一番,我打…
上一篇主要是在夸NHibernate实现的好,而这篇就完全是来抱怨的了.NHiberante有个毛病,就是如果是和数据库产生映射的类,就要求所有的public成员和protected成员必须是virtual的.请注意这里的要求有两个细节: 即使是方法,也必须标记为virtual 即时是不和数据库有映射关系的属性,也必须标记为virtual 这就让我觉得无厘头了,为什么没有任何关系的东西也要受到限制?我知道NHiberante要求将属性标记为virtual是为了延迟加载,因为只有这样它才能生成如上…
NHibernate是.NET平台上最著名的ORM框架,虽说出身于Java平台上的Hibernate,但是从外部看来这几乎就是一个.NET平台上的原生产品:有自己的社区,有自己的用户,有自己的商业支持,有利用C#特性的独立扩展.它不像Lucene.NET那样,一眼就能看出浓重的Java气息,Java的命名方式等等.我用NHibernate时间不长,而NHibernate的复杂程度也决定了我无法像了解LINQ to SQL那样容易.不过在使用了一段时间过后,还是对它有一定体会.有欣喜,有误解,也有…
原文地址:Must Everything Be Virtual With NHibernate? 老赵在博文中 我对NHibernate的感受(2):何必到处都virtual 提到这篇文章,顺便翻译一下. 如果你使用过 NHibernate 2.0 或者以后的版本,毫无疑问你将会遇到过几次下面的异常: NHibernate.InvalidProxyTypeException: The following types may not be used as proxies: NHibernateEx…
之前,看过很多NHibernate的东西.特别是 YJingLee的NHibernate之旅系列比较经典.看得多了,但是还没有真正的从头到尾的做过一边.今天从头到尾做了一遍,发现问题还真多.我就将我做的过程和在这中间碰到的问题跟大家分享一下.也可以让一些初学的朋友少走一些弯路,当然我碰到的很多问题在网上都能找到答案,我也就将一些需要注意点,和出错的点收集一下,然后放到一起,节省大家时间去疯狂Google.大致过程参照YJingLee的NHibernate之旅(2):第一个NHibernate程序…
系列文章 [Nhibernate]体系结构 [NHibernate]ISessionFactory配置 [NHibernate]持久化类(Persistent Classes) [NHibernate]O/R Mapping基础 引言 这部分不包括大量的.NET代码例子.我们假定你已经了解如何使用.NET自身的集合类框架(.NET's collections framework)和Set集合的概念.其实如果是这样,这里就真的没有什么东西需要学习了....用一句话来做个总结,你就用你已经掌握的知识…
摘要 从这一节起,介绍NHibernate Mapping的内容.前面文章都是使用的NHibernate XML Mapping.NHibernate XML Mapping是NHibernate最早最成熟的Mapping方法.其他的Mapping方法都是基于XML Mapping的思想进行的“变种”,要么暂时不能完全像XML Mapping那样功能丰富.其他的Mapping方法目前包括:Fluent Mapping.Attribute Mapping和Mapping by Convention…
第1章 NHibernate体系结构 总览 对NHibernate体系结构的非常高层的概览: 这幅图展示了NHibernate使用数据库和配置文件数据来为应用程序提供持久化服务(和持久化的对象). 我们试图显示更多NHibernate运行时体系结构的细节. 但挺不幸的,NHibernate是比较灵活的并且提供了好几种不同的运行方式.我们展示一下两种极端情况.轻型体系中,应用程序自己提供ADO.NET连接,并且自行管理事务.这种方式使用了NHibernate API的一个最小子集. 全面解决体系中…
MyGeneration的几个NHibernate模板功能已经很强,但还是存在些问题.例如:Guid主键支持不佳,代码不易修改,不支持中文注释等等.所以我决定自己来改写此模版.我把一部分通用的函数提取到自己定义的基类中,这样调试和修改都方便另外增加了一部分新功能. NHibernate里面的关系写起来也很烦人,很容易出错,所以我写了另一个模版专门生成关系代码.只需要把生成的代码拷到映射类文件和.hbm.xml文件中就可以了. 下载 如果你兴趣自己写模版,或者使用中有问题可以查看强大的代码生成工具…