近日用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里面吧,所以再我看来延时加载就是不加载。
分享到:
相关推荐
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.ByteCode.LinFu.dll NHibernate.dll Oracle.DataAccess.dll Oracle.DataAccess.resources.dll
在这个Demo中,我们将深入探讨以下几个关键知识点: 1. **对象关系映射(ORM)基础**:ORM是将关系数据库中的数据模型转换为对象模型的技术,它允许开发者使用面向对象的方式来处理数据库操作,提高了代码的可读性...
在提供的压缩包文件中,我们可以看到以下几个文件: 1. **readme.html**:这是常见的文档,通常包含了项目的基本信息、安装指南、注意事项等,是理解和使用NHibernate3.2的起点。 2. **releasenotes.txt**:这个...
在提供的文件列表中,我们可以看到以下几个关键文件: 1. **default.build** 和 **teamcity.build**:这些文件通常包含构建脚本,用于自动化编译、测试和打包过程。默认构建脚本(default.build)可能包含了MSBuild...
接下来,我们将讨论几个关键步骤: 1. **配置 NHibernate**:在应用程序启动时,需要加载 NHibernate 的配置文件,其中包含了数据库连接信息、方言、缓存策略等。这些信息可以通过 `NHibernate.Cfg.Configuration` ...
在NHibernate中,主要包含以下几个关键概念: 1. **实体(Entities)**:实体是应用程序业务逻辑中的对象,它们代表数据库中的表。例如,如果你有一个用户表,那么User类就是一个实体。 2. **映射(Mappings)**:...
NHibernate的使用流程主要包括以下几个关键步骤: 1. **引入NHibernate库并配置**: - 需要在项目中添加NHibernate的引用(NHibernate.dll)。 - 在桌面应用程序中配置`App.config`文件,在Web应用程序中配置`web...
在学习这个示例项目时,你需要关注以下几个关键知识点: 1. **NHibernate配置**:理解如何设置NHibernate的配置文件,包括数据库连接字符串、方言、缓存策略等。 2. **映射文件**:学习XML或注解方式来定义对象与...
在IT行业中,Asp.NET和NHibernate是两个非常重要的技术组件。Asp.NET是由微软开发的一个用于构建Web应用程序的框架,而NHibernate则是一个流行的面向对象的持久化框架,主要用在.NET环境中,用于简化数据库操作。在...
在"NHibernate所需的DLL"这个主题下,我们可以深入探讨以下几个关键知识点: 1. **NHibernate框架核心组件**:NHibernate的核心DLL包括NHibernate.dll,它提供了ORM的主要功能,如对象持久化、查询语言(HQL)和...
标题提及的“myGeneration模板 NHibernate DDL好久没有更新”,这意味着可能社区维护的myGeneration模板可能不适用于较新的NHibernate版本,导致在使用过程中出现兼容性问题。这通常是由于NHibernate的新特性或API...
在实际项目中,使用NHibernate需要注意以下几点: - **性能调优**:虽然NHibernate提供了很多优化手段,但在高并发环境下,仍需关注缓存策略、查询效率以及对象关系映射的合理设计。 - **学习曲线**:相对于直接...
配置NHibernate涉及几个关键步骤,包括创建Hibernate配置文件(通常为hibernate.cfg.xml),定义实体类,以及映射文件(.hbm.xml)。配置文件中包含了数据库连接信息,如数据库类型、用户名、密码和URL。映射文件则...
在提供的压缩包文件中,我们可以找到以下几个关键文件: 1. **readme.html**:通常,这是一个包含项目基本信息、安装指南或快速启动步骤的文档。用户可以通过阅读此文件了解如何开始使用NHibernate的最新版本。 2....
在Nhibernate中,有几个核心概念值得深入理解和掌握: 1. **实体(Entities)**:在Nhibernate中,实体代表数据库中的表。它们是业务逻辑中的对象,如用户、订单等。你需要为每个实体创建一个类,并使用特性(如 `...
在NHibernate 3.3中,有以下几个关键知识点值得深入探讨: 1. **对象关系映射(ORM)**:ORM是将数据库中的表映射为对象的一种技术,NHibernate作为ORM框架,消除了SQL与业务逻辑之间的耦合,提高了代码的可读性...
在"NHibernate组件3.3.0"中,我们关注以下几个关键知识点: 1. **对象关系映射(ORM)**:ORM是将数据库中的表映射为类和对象的过程,通过这种方式,开发者可以使用面向对象的方式来处理数据库操作,而不是直接写...
6. 性能分析:监测和优化NHibernate的性能,例如识别N+1查询问题。 安装和使用此类插件通常涉及下载安装文件,然后在Visual Studio中加载和配置。一旦安装成功,开发者可以在IDE内直接使用插件提供的工具和服务,...