摘要:using Castle.ActiveRecord.Linq;1.Make your entities inherit from ActiveRecordLinqBase<T>, then to query:var blogs = (from b in Blog.Queryable select b).ToList();2.Use ActiveRecordLinq.AsQueryable<T>, e.g.:var blogs = (from b in ActiveRecordLinq.AsQueryable<Blog>() select b).ToList(
阅读全文
摘要:以前都是拿AR访问Sql Server的, 工作的一直很好. 最近数据库换成Oracle 8i了, 使用AR访问时遇到了几个小问题, 现把问题描述和解决方案提供出来, 希望给遇到同样问题的朋友一些帮助.[1] Primary Key映射属性:要设为Sequence或者Native, 而不是Identity, 这个提醒一下大家.例如: (表中的Id类型为Number)[PrimaryKey(PrimaryKeyType.Sequence,"id")]publicintId{get{returnthis.id;}set{this.id=value;}}[2] varchar2类
阅读全文
摘要:使用ActiveRecord作为数据库持久层已经有一段时间,曾经发现这样一个现象,数据库中的一些Int,DateTime等字段被设置为了0,0001-01-01。期间我问技术总工,Hibernate在查询过程中会不会修改数据库?技术总工回答,绝对不可能!于是我以为是有同事在存入数据的时候没有初始化数据造成的。事实证明,这个我钦佩得五体投地的资深JAVA架构师错了。答案是会!而且容易引起重大的BUG!在一对多,多对多的映射使用中,为了防止取到过多的数据,我们会设置Lazy=True,延迟加载。在调用延迟加载的对象,都要加上Using(new SessionScope()).如下using(n..
阅读全文
摘要:根据数库的设计,有密切联系的对象的增加,删除,修改设置级联操作,在使用中会有很大的便利但是也有些需要注意的地方。之前的项目使用,为了避免不必要的麻烦,一律设置成了不级联操作。后面对象的使用时,很多地方多写了多余重复的代码。其实,在使用前根据对象的属性,设计好级联操作,能带来很大的便利。本文从多对多,和一对多两个方面,并针对数据库设计中主外键的属性来分析对象的级联。 由于学习Castle是从TerryLee的博文中开始,采用他老人家的习惯举例,以向他老人家致敬^_^1、一对多 假设一个博客有多个帖子,即一个Blog对应多个Post,权且称Blog为父对象,Post为子对象 一对多的级联有几种方.
阅读全文
摘要:[ActiveRecord(DiscriminatorValue="2")]publicclassBVO:BaseO{} 学习继承,纯属意外,数据库的设计者硬要把A,B,C三个完全不同的对象存在同一张表中,并振振有词说A,B,C三个对象的内容比较类似,都有Name,Address等属性,加一个Type标识就可以了。事后证明这个是数据库的一大败笔,因为这么项目中有D对象,D对象与A对象是一对一关系,与B对象是一对多关系,与C对象是多对多关系...... 这可苦了我了,按照一个表一个对象的思路,原来A,B,C作为一个对象 O,里面有个Type属性,当Type为1的时候为A,为2
阅读全文
摘要:最近这个项目采用了我积极推荐的CASTLE ACTIVERECORD作为项目的持久层,项目实施过程中遇到了一些自己早期测试没有遇到的问题,加上其他的一些零零碎碎的问题,总结一下1、ACTIVE RECORD自带的代码生成器并不支持ORACLE。我的做法是把数据库设置到SQL SERVER中,再生成的2、如果ORACLE的主键是自增序列,则采用下面的写法[PrimaryKey(PrimaryKeyType.Sequence,SequenceName="SE_KAM_FAVORITE_TYPE")]publicintFAVORTYPEID{}3、多对一,使用[BelongsTo
阅读全文
摘要:一.编写实体类代码为了实现多对多的关系,我们要在Customer 、CustomerAddress类中分别使用OneToOne特性。示例代码:Customer 类:[ActiveRecord("Customer")]public class Customer : ActiveRecordBase<Customer>{private Guid custID;private string name;private CustomerAddress addr;[PrimaryKey]public Guid CustomerID{get { return custID;
阅读全文
摘要:inner join(内连接) left outer join(左外连接) right outer join(右外连接) full join (全连接,并不常用) HQL中的条件用with即:left join ... with...SQL中的条件用on即:left join ... on...语句inner join, left outer join 以及 right outer join 可以简写。 from Cat ascat join cat.mate asmate left join cat.kittens askitten 通过HQL的with关键字,你可以提供额外的join条件。
阅读全文
摘要:因为ActiveRecord在底层封装了NHibernate,配置信息跟用NHibernate时的配置是一样一.需要配置什么1.配置NHibernate ADO.NET属性属性名说明connection.provider_class定制IConnectionProvider的类型.例如:full.classname.of.ConnectionProvider (如果提供者创建在NHibernate中), 或者 full.classname.of.ConnectionProvider, assembly (如果使用一个自定义的IConnectionProvider接口的实现,它不属于NHiber
阅读全文
摘要:表列如果你的列名是数据库的保留字,在Property中用"`"声明列名[Property("`User`")]public String User{ get { return _user; } set { _user = value; }}复制代码不要使用Status做列名,它是NHibernate的保留字,否则ActiveRecord会抛异常:Ambiguous column name 'Status'可以使用枚举作为列的类型,在数据库中将创建整数类型的列对象保存到数据库的时机只有在会话Flush()或事务Commit()的时候,对象才
阅读全文
摘要:一个 多对多关系 可以转换成两个 一对多关系下面举例说明:有 学生表 与 选修课程表 多对多关系一个学生可以选择多门课程, 一门课程可以被多个学生选修.需要新增加一个 学生选修课程情况表,2个字段(学生编号, 课程编号)然后 学生表 与 学生选修课程情况表 为 一对多关系.选修课程表 与 学生选修课程情况表 为 一对多关系.
阅读全文
摘要:One-One特性 [OneToOne(Cascade=CascadeEnum.All)]Own-Own特性[HasMany(typeof(Department), Table = "tb_Department", ColumnKey = "ParentId", Lazy = true, Inverse = true, Cascade = ManyRelationCascadeEnum.AllDeleteOrphan)]One-Many特性 [HasMany(typeof(Post), Table = "posts", ColumnK
阅读全文
摘要:摘要:多对多的关系在日常开发中也会经常遇到,在ActiveRecord中我们用HasAndBelongsToMany特性来实现Many-Many的关联,本文将通过一个具体的实例来介绍这一用法。主要内容1.准备数据库表2.编写实体类3.编写测试代码一.准备数据库表接着在上篇文章中的例子,为了实现多对多的关系,我们引入Community,即每个Blog可以属于多个社区,每个社区也可以有多个Blog。CREATETABLEBlogs(blog_idintIDENTITY(1,1)PRIMARYKEY,blog_namevarchar(50),blog_authorvarchar(50))CREATE
阅读全文
摘要:摘要:前面几篇文章简单的介绍了ActiveRecord中的基本映射以及构建配置信息,本文我们用ActiveRecord里面的Blog,Post例子来实现One-Many/Many-One关联。主要内容1.准备数据表结构2.编写实体类并介绍HasMany和BlongsTo特性3.构建配置信息4.编写测试代码一.准备数据表结构在这个例子中,我们引入了两个对象Blog、Post,它们之间的关系是一对多,即一个Blog有多篇Post。需要用到的数据表结构如下CREATETABLEBlogs(blog_idintIDENTITY(1,1)PRIMARYKEY,blog_namevarchar(50),b
阅读全文
摘要:ab是apache自带的一个很好用的压力测试工具,当安装完apache的时候,就可以在bin下面找到ab下载地址:http://files.cnblogs.com/xusion/ab.rar1 我们可以模拟100个并发用户,对一个页面发送1000个请求./ab -n1000 -c100http://vm1.jianfeng.com/a.html其中-n代表请求数,-c代表并发数返回结果:##首先是apache的版本信息This is ApacheBench, Version 2.3 <$Revision: 655654 $>Copyright 1996 Adam Twiss, Ze
阅读全文
摘要:集合延迟加载了,把lazy改成false,或者使用OpenSessionInView把mapping文件里面的set那部分的lazy设置为false既然filter能够open、close Session,当然你也可以啊,看看filter里怎么写的,照猫画虎不就知道啦:D现在只是你不能指望在init方法里filter给你管理session,你必须手动的打开一个session,用完以后close。这样是代价最小的修改,其他代码不需要改。 /// <summary> /// 延迟加载 /// </summary> public static void Te...
阅读全文
摘要:主要内容简单映射1.ActiveRecordAttribute2. PrimaryKeyAttribute3.CompositeKeyAttribute4.PropertyAttribute5.FieldAttribute一.ActiveRecordAttribute每一个实体类都必须继承于基类ActiveRecordBase,并在实体类上设置特性ActiveRecordAttribute,示例代码//指定数据库表名[ActiveRecord("Blogs")]publicclassBlog:ActiveRecordBase{//}//不指定数据库表名[ActiveReco
阅读全文
摘要:Castle 常用方法ActiveRecord 的 CRUD 操作基本上都是由 ActiveRecordBase 的静态方法完成。其实例(含子类型)方法,以及 ActiveRecordMediator 只是对这些静态方法的包装调用而已。当然,ActiveRecordBase 方法又是对 NHibernate Session 方法的包装。我们用下面这个实体来简单演示一下常用方法的使用。[ActiveRecord("Users")]public class User : ActiveRecordBase<User>{ private int id; [Primary
阅读全文
摘要:本文出自:http://www.cnblogs.com/xuld/archive/2011/02/20/1958933.html#pagedcomment本文面向玩代码玩的蛋疼的读者。库和框架都是一种有别于软件、面向程序开发者的产品形式。正因为如此,也有很多人误以为库就是框架,或者认为指定语言的库就是框架。库的英语为 Library ( 简写 Lib ),框架的英语为 Framework。库是将代码集合成的一个产品,供程序员调用。面向对象的代码组织形式而成的库也叫类库。面向过程的代码组织形式而成的库也叫函数库。在函数库中的可直接使用的函数叫库函数。开发者在使用库的时候,只需要使用库的一部分类或
阅读全文
摘要:Castle是由Hamilton Verissimo撰写的,从2003年就开始开发,并在2006年11月发布了1.0 RC2 。2007年09发布了1.0 RC3版本。Castle是个轻量级(Lightweight)容器(Container)、实现 IoC(Inversion of Control)概念,是一个全方位的应用程序(Application)框架(Framework),并提供相关的一系列工具。Castle的核心是个轻量级(Lightweight)容器(Container),实现了IoC(Inversion of Control)模式的容器,基于此核心容器所建立的应用程序,可以达到程序
阅读全文