[ActiveRecord] 之五:ActiveRecordMediator
来源:互联网 发布:淘宝怎么解决管控纪录 编辑:程序博客网 时间:2024/05/01 16:04
有意无意的,很多文章都没有提及 ActiveRecordMediator 。
ActiveRecordMediator最大的用途是:即便你的实体类不是继承自 ActiveRecordBase (不推荐这么做),它也可以进行同等的创建、查找等操作;另外这个类实现了很多常用的方法,我们直接使用它就没必要为每个实体类写一堆相同的操作方法了(ActiveRecordBase的静态方法干吗声明为 protected internal?)。
看看下面的类型定义,方法是不是很多?
ActiveRecordMediator最大的用途是:即便你的实体类不是继承自 ActiveRecordBase (不推荐这么做),它也可以进行同等的创建、查找等操作;另外这个类实现了很多常用的方法,我们直接使用它就没必要为每个实体类写一堆相同的操作方法了(ActiveRecordBase的静态方法干吗声明为 protected internal?)。
[ActiveRecord]public class User{ private int id; [PrimaryKey(PrimaryKeyType.Identity)] public int Id { get { return id; } set { id = value; } }}public static void Test(){ ActiveRecordMediator.Create(new User());}
看看下面的类型定义,方法是不是很多?
public class ActiveRecordMediator{ public ActiveRecordMediator(); public static void Create(object instance); public static void Delete(object instance); public static void DeleteAll(Type type); public static void DeleteAll(Type type, string where); public static object Execute(Type targetType, NHibernateDelegate call, object instance); public static object ExecuteQuery(IActiveRecordQuery q); public static Array FindAll(Type targetType); public static Array FindAll(Type targetType, params ICriterion[] criterias); public static Array FindAll(Type targetType, Order[] orders, params ICriterion[] criterias); public static object FindByPrimaryKey(Type targetType, object id); public static object FindByPrimaryKey(Type targetType, object id, bool throwOnNotFound); public static ISessionFactoryHolder GetSessionFactoryHolder(); public static void Save(object instance); public static Array SlicedFindAll(Type targetType, int firstResult, int maxresults, params ICriterion[] criterias); public static Array SlicedFindAll(Type targetType, int firstResult, int maxresults, Order[] orders, params ICriterion[] criterias); public static void Update(object instance);}
当然,Castle 还提供了ActiveRecordMediator<T> 和ActiveRecordBase<T>这两个泛型实现,但不知道为什么没有直接继承自ActiveRecordMediator和ActiveRecordBase,而且还少了一些实用的方法。看来鱼和熊掌不能兼得,当然你可以自己修改代码来的兼而并之。
在ActiveRecordMediator的多个方法中都使用了ICriterion接口,其真正实现是NHibernate.Expression名字空间。我们可以Expression静态类生成许多查询条件。
// 分页查询 (查询100<=id<200 的用户对象集合,返回第1页,每页10条记录)
ActiveRecordMediator.SlicedFindAll(typeof(User), 0, 10, Expression.Between("id", 100, 200));
- [ActiveRecord] 之五:ActiveRecordMediator
- [ActiveRecord] 之三:SessionScope
- [ActiveRecord] 之四:Cascade
- [ActiveRecord] 之六:继承
- [ActiveRecord] 之八:Queries
- Yii2学习之ActiveRecord
- Castle学习系列(五)---ActiveRecord事务
- ActiveRecord
- ActiveRecord
- ActiveRecord
- [ActiveRecord] 之二:常用方法
- JFinal之ActiveRecord开发示例
- Jfinal之ActiveRecord(上)
- ActiveRecord之Oracle中文乱码
- [ActiveRecord] 之:多数据库配置
- [ActiveRecord] 之七:多数据库配置
- Rails源代码研读之ActiveRecord研读
- Yii之ActiveRecord内存泄漏问题
- [ActiveRecord] 之四:Cascade
- 树链剖分(QTREE)
- VC6.0中C4541号警告的原因以及解决方案
- 系统架构之二(棋牌类游戏常用架构)
- android滑动基础篇
- [ActiveRecord] 之五:ActiveRecordMediator
- ExpandableListView基本实现—能运行
- 读取RSS源的天气预报Web Server实现
- (2011.07.04-2011.07.09)六天的学习小记
- [ActiveRecord] 之六:继承
- 根据查询的关键字,实现获取百度指定页数的搜索结果的信息(网页地址,标题,摘要,并有排序的说明)
- C++图像处理 -- 图像颜色混合(中)
- 字节对齐
- 免费教程大型网站整理大集合