http://www.rainsts.net/article.asp?id=243
有意无意的,很多文章都没有提及 ActiveRecordMediator 。

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));

转载于:https://www.cnblogs.com/easyleo/p/3193865.html

[ActiveRecord] 之ActiveRecordMediator相关推荐

  1. [ActiveRecord]之 CRUD

    ActiveRecord 的 CRUD 操作基本上都是由 ActiveRecordBase 的静态方法完成.其实例(含子类型)方法,以及 ActiveRecordMediator 只是对这些静态方法的 ...

  2. Castle ActiveRecord(一)概述

    一.ActiveRecord与Castle ActiveRecord ActiveRecord是<Patterns of Enterprise Application Architecture& ...

  3. activeRecord 绑定属性的属性

    在使用caste activeRecord的时候 假设我们有这样的一个类(无限级分类)  /**//// <summary>     /// 行业     /// </summary ...

  4. Castle ActiveRecord 泛型应用

    Castle ActiveRecord在.Net2.0下支持泛型,这极大的方便了我们创建强类型集合以及对对象的强类型操作.本文引用了Castle站点上泛型的例子来详细介绍如何应用泛型. 另外你需要在这 ...

  5. Castle ActiveRecord学习实践(5):实现Many–Many关系的映射

    摘要:多对多的关系在日常开发中也会经常遇到,在ActiveRecord中我们用HasAndBelongsToMany特性来实现Many-Many的关联,本文将通过一个具体的实例来介绍这一用法. 主要内 ...

  6. 对ActiveRecord的评论

    ActiveRecord的主要优点是一个过渡模式,当你没法从失血一步走到充血模型,或者不大确定是否该这样做时,是一种比较好的选择 另外就算使用充血模式的复杂项目,还是会存在很多适合ActiveReco ...

  7. Yii ActiveRecord 的via和viaTable示例

    Yii中,将两个不相关的表利用中间表关联有via和viaTable两种方法,这里通过用户权限查询来进行示例. 关系如上,需要建立三个表 用户表 权限表 用户表 数据: 权限表 数据: 关联表 数据: ...

  8. Castle ActiveRecord学习实践(4):实现One-Many关系的映射

    摘要:前面几篇文章简单的介绍了ActiveRecord中的基本映射以及构建配置信息,本文我们用ActiveRecord里面的Blog,Post例子来实现One-Many/Many-One关联. 主要内 ...

  9. Castle.ActiveRecord的嵌套事务处理

    嵌套的情况下,怎么处理Castle.ActiveRecord的事务? 今天试了一下,原来还是很简单的,只需要使用Castle.ActiveRecord.TransactionMode.Inherits ...

最新文章

  1. Colly源码解析——框架
  2. 深度学习model.fit计算流图
  3. 编程珠玑十一章课后题答案
  4. [附加题] 结对项目对接的苦痛
  5. 学点 C 语言(41): 函数 - 关于 main 函数
  6. [云炬创业学笔记]第二章决定成为创业者测试7
  7. Android N混合编译与对热补丁影响深度解析
  8. C++ 简单实现基数排序(list容器)
  9. 20191104_1_相关性分析
  10. js、jQuery实现文字上下无缝轮播、滚动效果
  11. 面试必考:秒杀系统的9个核心知识点,一次性打包给你
  12. c语言编写打字母游戏代码,求一个用C语言编写的小游戏代码
  13. 实现计算机系统的资源共享,实现多操作系统计算机的资源共享
  14. 【https】 1 HTTP Security (bb102-1)
  15. oracle怎么建立物化视图,Oracle 建立物化视图步骤
  16. 用python预测超车是否危险_用Python预测泰坦尼克号乘客生存情况
  17. 当计算机遇上经济学:如何量化你的投资并获得第一桶金
  18. 解决WPS公式上浮问题
  19. AccessibilityService——实现微信切换账号功能
  20. 常见文件头 文件幻数

热门文章

  1. 二路单调自增子序列模型【acdream 1216】
  2. Android下写一个永远不会被KILL掉的进程/服务
  3. java 蓝桥杯算法训练 P1102
  4. ide中tomcat乱码_idea tomcat 乱码问题的解决及相关设置
  5. linux vi 上下左右 ab,【Linux】Ubuntu vi 上下左右变ABCD及 apt-get install报错问题解决方法...
  6. (229)DPU加速数据处理
  7. (129)System Verilog限制建仓方法
  8. std::move()源码分析
  9. 【蓝桥杯嵌入式】【STM32】6_ADC之LCD实时显示电压值
  10. 【openMV】OpenMV4基础知识