O/R Mapping
billy_zh
这个作者很懒,什么都没留下…
展开
-
Method not found: Int32
前几天,nhibernate-0.0.5发布了,解决了一个级联删除的问题,之前我还一直为这个问题烦恼了。 不过新的问题又出现了,就是Method not found: Int32 , 由System.Runtime.CompilerServices.RuntimeHelpers.GetHashCode(System.object)引发,觉得有点奇怪,这个是系统类库的代码,应该与NHibernate原创 2004-07-16 17:09:00 · 5174 阅读 · 4 评论 -
使用Gentle做数据层的业务层源码
一个小型web网站的业务层源码,使用Gentle(一个开源的O/R Mapping框架)做为数据持久层。这个业务层使用VB.net编写,涉及的业务对象比较少,功能也很简单,主要是给想使用O/R Mappingg进行开发的朋友一些参考。下载(367K)原创 2004-10-21 16:53:00 · 2189 阅读 · 3 评论 -
IBatisNet for dotNet2.0的一个web demo
三层结构设计,web层使用了三种方式进行数据展示,1. GridView2. Repeater + DataBinder3. Repeater + ItemDataBound事件下载地址: http://www.cchensoft.com/down/IBatisDemo2005v0.1.zip原创 2007-08-16 18:40:00 · 1861 阅读 · 1 评论 -
IBatis/IBatis.Net中的数据加密
作为一个o/r mapping组件,IBatis通过反射(Reflect)完成对象的持久化,如果要对数据进行加密,那么切入点就在reflect上,思路就是当IBatis通过Reflect给对象属性赋值时,我们解密数据,反之加密数据。那么如何切入了?先跟踪源代码看看 :)如何跟踪源代码这里就不繁述了,这里列出几个重要的对象/接口:1. DotNetObjectDataExcha原创 2008-09-04 14:56:00 · 1301 阅读 · 0 评论 -
将ibatis.net中定义的statement转换为实际的sql语句
有时我们需要查看ibatisnet中statement生成的实际sql语句,可以通过下面的方式取得:public static string GetSql(string statementName, object paramObject){ ISqlMapper mapper = Mapper.Instance(); IMappedStatement原创 2008-09-04 15:05:00 · 1052 阅读 · 1 评论 -
NHibernate dotNet2.0的一个web demo
三层结构设计, web层使用了三种方式进行数据展示,1. GridView2. Repeater + DataBinder3. Repeater + ItemDataBound事件 下载地址: http://www.cchensoft.com/down/NHibernateDemo2005v0.1.zip原创 2008-09-11 11:01:00 · 1519 阅读 · 2 评论 -
NHibernate应用 one-to-many
数据库中的主从表就是一对多的关系了,这种关系在按范式设计的数据库中是十分常见的.在nh中,通过one-to-many映射可以十分方便的处理这种关系,包括级联更新,删除等. 下面以一个简单的主从表来说明one-to-many的应用.先来看看Parent类的映射信息: one-to-many关系必须通过一个nh的集合类型来定义,原创 2008-10-07 13:44:00 · 1543 阅读 · 0 评论 -
NHibernate应用 many-to-many
在数据库的多对多关系中, 实现方法是通过一个额外的关联表将两个主表关联起来,关联表中只保存两个主表的主健,显然, 主表与关联表是一对多的关系. 这样两个主表就通过这个关联表构成了一个多对多的关系. 典型的例子就是用户和权限了, 每个用户可以有多个权限, 而每个权限也可以分配给多个用户. 通过一个用户权限表就可以实现这样的要求.因为关联表并没有其它任何信息, 所以在NH中它不能算是一个持久对象, 没原创 2008-10-07 13:55:00 · 1412 阅读 · 0 评论 -
NHiberante源码分析之: 事务
对数据库的操作是少不了事务处理的,事务能保整数据完整性和有效性。 在nh中,使用Transaction对象对.net的事务对象(实现了IDbTransaction接口的对象)进行了包装。在nh中,一个典型的事务处理是这样的(见ISession.cs的注释)ISession sess = factory.OpenSession();Transaction tx;try { tx = sess.B原创 2008-10-07 14:17:00 · 1052 阅读 · 0 评论 -
NHibernate应用 one-to-one
nh中的one-to-one(一对一)映射有两种情况, 一种是主键(PrimaryKey)关联, 一种是外健(ForeignKey)关联. 在主键关联的情况下, 显然必须有一个主键是根据别一个主键而来的, nh通过一个特殊的方式来处理这种情况, 要注意的是两个主健名称必须同名.而外健一对一关联, 需要在one-to-one配置中定义一个property-ref属性, 这个配置属性在当前版本的nh中原创 2008-10-07 13:54:00 · 2183 阅读 · 1 评论 -
NHibernate 架构UML图
从图中可以看到,Session和SessionFactory是NHibernate的核心部分。SessionFactory维护到持久机制(数据库)的连接并对它们进行管理,同时还保存着所有持久对象的映射信息。SessionFactory由Configuration.BuildSessionFactory创建,这个对象一般使用Singleton模式。Session用于将对象持久化,支持数据库事务,原创 2008-10-07 13:56:00 · 3720 阅读 · 0 评论 -
NHibernate 2.x应用: 返回DataSet
虽然NHibernate是完全OO的,但我们还是有需要返回DataSet的时候。在ADO.NET里,要返回DataSet需要使用IDbDataAdapter, 那么通过NHibernate返回DataSet的关键就是如何创建合适的IDbDataAdapter实现类。在NHibernate里,由IDriver负责创建Connection和Command,我们可以扩展相应的Driver使其能创原创 2008-10-08 18:20:00 · 1878 阅读 · 1 评论 -
Gentle架构UML图
本文已转至如下地址:http://www.narchitecture.net/Article/ArticleDetails.aspx?id=wkoudu原创 2004-10-18 11:22:00 · 2025 阅读 · 1 评论 -
NHibernate源码分析之三(续):数据持久化
当持久化对象时,显然必须存在把记录的值赋值到对象属性和取得对象属性的值用于持久化操作,对于更新操作,还需要检查对象的值是否已发生变化,即是否为Dirty,这些操作都是由对象的持久化类来完成的。有关持久化类可参考《会话和持久化操作》一文。下面对NH的源码进行分析,以了解NH中数据加载和更新的过程。一、持久对象加载先来想像一下对象的加载过程(Load).1. 根据对象Id从数据库取得记录;2. 使用默原创 2004-10-18 11:18:00 · 3478 阅读 · 0 评论 -
nhibernate源码分析之七: HQL数据加载
NH中,HQL是一个十分强大的面向对象的查询语言,简单的说,就是不需要使用实际的表名和列名来查询数据,而改用类名和属性。有两种方式来执行HQL数据加载,一种是直接使用ISession的Find方法,另一种是使用IQuery接口。IQuery接口提供了一些额外的设置,最重要的就是分页了,这个和ICriteria差不多,另外一些就是设置参数的值了。IQuery最终还是会调用ISession的原创 2004-09-23 17:08:00 · 2880 阅读 · 1 评论 -
nhibernate配置和持久对象映射文件
nhibernate配置有三种方式来存放nhibernate的配置1, 作为单独的一节放在相应程序的配置文件中,对于执行文件或类库为文件名称后加.config,对于asp.net则是放在web.config中。这种方式必须在配置文件的configSetions中声明nhibernate的配置节,配置内容由Cfg.Environment类来读取,该类所有成员均为静态的,另外它还定义了配置中k原创 2004-07-18 20:04:00 · 11432 阅读 · 7 评论 -
nhibernate源码分析之开篇: 计划和安排
只从使用nhibernate以来,请被其强大的功能和使用的简洁所吸引。为了进一步研究nhibernate,决定分析其源代码,如有感兴趣者,欢迎一起研究。这里列出了将要分析的部分:1. nhibernate源码分析之一: 对象映射;2. nhibernate源码分析之二: 会话工厂;3: nhibernate源码分析之三: 会话和持久化操作;4. nhibernate源码分析之四: 持久化操作与SQ原创 2004-07-26 01:10:00 · 4682 阅读 · 6 评论 -
nhibernate源码分析之一:对象映射
1. 持久对象映射文件关于持久对象映射文件,这里就不多说了,可参考nhibernate的例子和文档。在nhibernate源代码的根目录里有一个nhibernate-mapping-2.0.xsd文档,这个文档是nhibernate用来对映射文件进行验证的,我们也可以借助相关软件用这个文档来验证映射文件的有效性。2. 映射信息的读取通过Configuration类,可以用多种方式读取映射信息,一些原创 2004-07-26 19:04:00 · 6180 阅读 · 2 评论 -
nhibernate源码分析之三: 会话与持久化操作
会话是nhibernate中的主要接口,也是我们进行持久化操作和数据加载的主要接口,ISession在IClassPersister、ITransaction、ICriteria和IQuery之间起着协调者的作用。会话对象通过调用会话工厂的OpenSession方法获得,OpenSession方法有一个参数interceptor,这是一个拦截器,由实现了IInterceptor接口的对象来完成,比原创 2004-07-31 21:17:00 · 2470 阅读 · 1 评论 -
nhibernate源码分析之二:会话工厂
会话工厂是NHibernate中的关键类,它与数据库连接、数据库事务等进行交互,还存储着与所有持久对象类型关联的持久化对象,持久化类是持久化的关键,它实现基本的CRUD操作。当用户需要持久操作时,由会话工厂创建一个会话供用户进行持久操作。1. 会话工厂的创建会话工厂由ISessionFactory接口实现,由Configuration的BuildSessionFactory方法创建,会话工厂应该使原创 2004-07-27 14:12:00 · 3223 阅读 · 1 评论 -
鲁棒的数据库持久层设计(白皮书)
如果你想深入研究数据持久层,或自己开发数据持久层,那么本白皮书将是一个很好的参考。目录1. 对阅读本文有帮助的一些信息2. 持久层的类型3. CLASS-TYPE体系结构4. 持久层的需求5. 持久层的设计? 5.1 设计概要??? 5.1.1 PersistentObject 类??? 5.1.2 PersistentCriteria 类层次??? 5.1.3 游标类??? 5原创 2004-07-17 20:50:00 · 2654 阅读 · 1 评论 -
nhibernate源码分析之四 持久化操作与SQL语句
持久化操作由与持久对象关联的持久化类来完成,持久化类是实现IClassPersister接口的类,每个持久对象都有一个关联的持久化类,这些持久化类存储在会话工厂的classPersisters集合中,nhibernate允许用户通过自定义的持久化类来持久化数据。IClassPersister接口定义了基本的CRUD操作,在nhibernate中由AbstractEntityPersister类实现原创 2004-08-06 14:57:00 · 2348 阅读 · 0 评论 -
nhibernate源码分析之五: 对象标识
对象标识相当于数据表中的主键,在持久化中起着十分重要的作用,nhibernate通过对象标识来辨别两个持久对象是否相等。在映射文件中,通过id属性来定义对象标识,内容如下: 其中unsaved-value属性用来指明对象未持久化时的值,如果此值与未持久化的对象标识值不符,将无法save对象,generator用于指定标识对象的类型,常用的有identity, assigned等。标识对象为实现原创 2004-08-08 23:38:00 · 3481 阅读 · 2 评论 -
在nhibernate中执行SQL语句和存储过程
在有些时候,可能需要直接执行SQL语句、存储过程等,但nhibernate并没有提供一种让我们执行SQL语句的方法,不过可以通过一些间接的方法来实现。1. IDriver接口IDriver接口就是数据访问的驱动器,对于不同的数据提供者(SqlClient, OleDb等)就有不同的驱动器,与SqlClient对应的是SqlClientDriver, 而与OleDb对应的就是OleDbDriver。原创 2004-08-12 19:45:00 · 5217 阅读 · 10 评论 -
nhibernate源码分析之八: 解析HQL
本文将对HQL查询文本的解析过程进行分析,这个可以说是NH中比较复杂的一块了(个人认为),涉及到的类也比较多。建议阅读之前先深呼吸十下,看完之后脑袋成浆糊可不要找我哟。:-)在HQL数据加载一文中,我们有提到QueryTranslator的创建过程,代码如下://*** SessionFactoryImpl.cs 429行 *** private QueryTranslator GetQ原创 2004-09-25 12:44:00 · 2913 阅读 · 1 评论 -
nhibernate源码分析之六: Criteria数据加载
ICriteria是使用Expression进行数据加载的接口, 提供了设置表达式(Expression), 排序方式(Order), 分页记录等操作.它使用一种类似于SQL语句where表达表的方式来加载满足条件的数据.下面以一个查询Username为billy, Password为test的用户为例来分析nh中Criteria数据加载是怎样工作的.查询代码如下:Expre原创 2004-09-22 21:17:00 · 1917 阅读 · 0 评论 -
使用IBatisNet对NText类型的字段插入超长文本
使用IBatisNet当对NText类型的字段插入超长的文本时,报错误"当前命令发生了严重错误。应放弃任何可能产生的结果"查了一下资料,当使用命名参数式sql语句时,对于NText类型的参数,如指定length,则可避免上面的问题,但IBatisNet的resultMap的property里只有dbType而没有length,不知为何不提供? NHibernate里就有类似length原创 2008-10-11 22:25:00 · 1292 阅读 · 0 评论