`
ron
  • 浏览: 30022 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

NHIBERNATE的几个问题

阅读更多

近日用NHIBERNATE做一个不大的项目,对NHIBERNATE有了第一手的经验,我越使用NHIBERNATE,越喜欢他,但是经过一段时间的琢磨,还是发现NHIBERNATE有以下问题(当然也有可能是我理解不到位),有点骑虎难下的感觉。

1、N-N的关系有点牵强,要两边都将对方加入,另外我查了很多资料、也看了NH的测试用例只说如何建立N-N的关系,却没有感觉如何删除的,总不能建立了就不删除吧。

2、没有办法在N-N关系之间建立关联类,如学生和课程是n-n关系,很显然这2个实体中会有一个关联类,这是UML很早就引入的概念,但是NHIBERNATE好像不能实现,甚至HIBERNATE好像也没有实现。如果不能实现,我们碰到这种情况就只能用弱化的2个1-n关系来表达。这是多么郁闷的事情呀。

3、不能复合查询,在HIBERNATE 很早的版本就实现复合查询,但NHIBERNATE写了这个的测试用例,但是被注释起来了。复合查询,是指以下使用方式:
ICriteria cri = session.CreateCriteria(typeof(SysUser));
cri.Add(Expression.Eq(...)) // 添加查询表达式
ICriteria addrCriteria = cri.CreateCriteria("Address");
addrCriteria.Add(Expresion...)
 
这样就可以实现复合查询了。

但是NHIBERNATE在ICriteria 接口并没有提供CreateCriteria的方法。

我们起先考虑使用ICriteria而不用hql的原因:
a. 查询/添加/删除/修改 合并成一个页面,因为都是传入一个类似的实体了,因此这个实体就是携带了查询条件了的。
b. 我们实现了页面数据的自动获取,因此通过Expresion.Add(Example...) Example 是NHIBERNATE提供的一个可以通过实体来构建ICriteria的方法。因此如果NHIBERNATE实现的话,我们的代码将减少。但是不幸的就是Example仅仅实现单实体查询。

4、在N-1的关系中的,N方加一条记录,需要load 1方的对象,总觉得很不顺手,但是想想也只能这样。

5、N-1、N-N的关系导致大量无效的查询,但是想想NH的主要之处就是处理关系,但这种关系有不能乱用,有点觉得解决了一些问题,却有带来了问题。至于延时加载,也觉得有点用不上,NH的延时加载必须在同一Session中有效,但总不能上层还套在你的Session里面吧,所以再我看来延时加载就是不加载。




























浅水滩 2005-06-27 02:34 发表评论
分享到:
评论

相关推荐

    NHibernate常用几个组件

    NHibernate.dll NHibernate.ByteCode.Castle.dll NHibernate.ByteCode.Castle.dll Castle.Core.dll Castle.DynamicProxy2.dll Antlr3.Runtime.dll log4net.dll Iesi.Collections.dl NHibernate.cst

    NHibernate 相关的几个dll

    NHibernate 相关的几个dll NHibernate.ByteCode.LinFu.dll NHibernate.dll Oracle.DataAccess.dll Oracle.DataAccess.resources.dll

    mygeneration_NHibernate

    myGeneration的几个NHibernate模板功能已经很强,但还是存在些问题。但这个原始单表很好用

    Nhibernate代码生成器2.0

    此版本吸取前几个版中的优点,增加了更多功能.修改了以前的一些BUG 特点: 1.完全支持Nhibernate1.2 2.数据支持Access2000/2003 MSSQL2000/2005 Oracle (MYSQL正在集成中...) 3.可以生C#或VB.NET代码 4.自动识别表...

    手把手教你写第一个NHibernate小程序

    为了工作要研究NHibernate,搜遍网上没找到一个可以直接运行,又能让人看的明白的代码。 自己研究了几天终于搞通了,在这里把所有得步骤描述一遍,免得大家再走弯路。 文档+源码,VS2008+SQLSERVER2005运行成功

    Nhibernate代码生成器v2.1中文版

    此版本吸取前几个版中的优点,增加了更多功能.修改了以前的一些BUG 特点: 1.完全支持Nhibernate1.2 2.数据支持Access2000/2003 MSSQL2000/2005 Oracle (MYSQL正在集成中...) 3.可以生C#或VB.NET代码 4.自动识别表...

    NHibernate的一套dll文件

    NHibernatedll下载,含有常用的几个NHibernate Dll,建议全部替换,我项目开发的时候就遇到过因为版本不同,而导致的问题

    NHibernate in Action by Christian Bauer

    第九章开始讨论开发的流程以及一些有用的工具,通过一个NHibernate应用解释几种着手点。我们同时也研究一些领域模型及数据库关联的代码生成和自动维护模式。紧接着我们还研究了如何通过NHibernate解决传统的数据库...

    MVC+Spring.net+Nhibernate+EasyUI+Jquery

    ASP.NET MVC+Spring.net+Nhibernate+EasyUI+Jquery开发案例,运用这几个技术开发的项目

    Nhibernate教程 -11个

    教程很全。收集了很几年,电子书。 教程很全。收集了很几年,电子书。

    NHibernate学习

    但挺不幸的,NHibernate是比较灵活的并且提供了好几种不同的运行方式。我们展示一下两种极端情况。轻型体系中,应用程序自己提供ADO.NET连接,并且自行管理事务。这种方式使用了NHibernate API的一个最小子集。

    NHibernate-Caches:NHibernate缓存提供程序

    NHibernate Contrib包含几个与不同的缓存服务器和框架一起使用的软件包。 建议先研究一段时间,然后再决定哪个更适合您,因为某些提供程序需要安装其他服务(这提供了很棒的性能,但在某些情况下可能更难安装)。 ...

    NHibernate 学习文章

    不都是号称符合啥sql几几的标准吗?你的头开始痛了,你开始写不同的DAL,代码与十指齐飞,脑袋昏昏天黑黑——又加班了!!这次第,怎一个愁字了得!! 然后你觉得再也不能这样过了,再也不能这样活了,你开始用...

    NHibernte+ASP.NET MVC+JQuery实现增删改查

    这是使用了好几个技术实现的一个简单的案例,看名字都就知道了,名字如下:NHibernte+ASP.NET MVC+JQuery实现增删改查

    CSHibernate .Net轻量通用数据层框架(全部源码)

    最近修补了所有BUG,又加了几个功能,主要是修改了一些内部实现提高性能,加了几个新方法,还简单实现了个缓存功能,Oralce的也在实际项目中使用过了,没什么问题...这次源码不仅有生成器的,还有CSHibernate组件的...

    asp.net知识库

    与正则表达式相关的几个小工具 你真的了解.NET中的String吗? .NET中的方法及其调用(一) 如何判断ArrayList,Hashtable,SortedList 这类对象是否相等 帮助解决网页和JS文件中的中文编码问题的小工具 慎用const...

    MyGeneration代码生成器

    它由几个重要的外部组件组成,其中常用的有以下两个 MyMeta包含数据库中的信息。我们可以从这个库中获得想要的和数据库相关的信息。例如:数据库名,数据库里面的表,表里面的主键等等。 Zeus为MyGeneration提供了...

    GoldArch.net框架源码

    准确的说,应该叫黄金组合,把几款开源的框架组合。 总体架构是:asp.net+ms mvc 1.0+spring.net+nhibernate+extjs(and coolite) 目前的目标是应用这种组合做一款开源的人力资源系统。 现在发布的是第一阶段的代码: ...

    CMS资源Orchard.Web.1.6

    Orchard是一个以微软为主导的开源CMS...这次更新主要有如下几个特点: •支持MySql •升级到MVC4 •新增WebAPI •NHibernate升级到3.3 •新增默认数据库缓存 •预编译功能 •视图引擎升级到Razor 2 •性能优化

    医院HISDemo源码

    系统分了几个逻辑层,对于层与层之间的调用我们要实现一下几点: 1.层与层之间只通过接口调用 2.接口所对应的具体实现通过XML配置指定 3.可能会对接口实例的生存周期进行管理 这里我们使用Unity的依赖注入容器...

Global site tag (gtag.js) - Google Analytics