[ActiveRecord] 之ActiveRecordMediator

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值