zoukankan      html  css  js  c++  java
  • Castle ActiveRecord学习实践(11)——ActiveRecordMediator

    ActiveRecordMediator类也为实体类提供了持久化的方法(CRUD),先来看看ActiveRecordMediator中的方法

    ActiveRecordMediator

    ActiveRecordMediator类实现了很多常用的方法。包括 Create、Delete、FindOne、FindAll、FindByPrimaryKey、Save、SlicedFindAll、Update等。

    基本操作

       1:  // Create
       2:  Customer c = new Customer();
       3:  c.Name = "Mr. Johnson";
       4:  c.Address = String.Empty;
       5:  ActiveRecordMediator<Customer>.Save(c);
       6:   
       7:  // Read/Update
       8:  Customer loaded = ActiveRecordMediator<Customer>.FindOne(Expression.Eq("Name", "Mr. Johnson"));
       9:  loaded.Address = "Middle of the Road";
      10:  ActiveRecordMediator<Customer>.Save(loaded);
      11:   
      12:  // Delete
      13:  ActiveRecordMediator<Customer>.Delete(c);

    验证支持

       1:  // Entity
       2:  [ActiveRecord]
       3:  public class Customer
       4:  {
       5:          private Guid id;
       6:   
       7:          [PrimaryKey(PrimaryKeyType.GuidComb)]
       8:          public Guid Id
       9:          {
      10:                  get { return id; }
      11:                  set { id = value; }
      12:          }
      13:          private string name;
      14:   
      15:          [Property(Unique=true,NotNull=true)]
      16:          [ValidateNonEmpty]
      17:          [ValidateIsUnique]
      18:          public string Name
      19:          {
      20:                  get { return name; }
      21:                  set { name = value; }
      22:          }
      23:          private string address;
      24:   
      25:          [Property(NotNull=true)]
      26:          [ValidateNonEmpty]
      27:          public string Address
      28:          {
      29:                  get { return address; }
      30:                  set { address = value; }
      31:          }
      32:  }    
      33:   
      34:  // using code
      35:  Customer c = new Customer();
      36:  c.Name = "Mr. Johnson";
      37:  c.Address = String.Empty;
      38:   
      39:  IValidatorRunner runner = 
      40:          new ValidatorRunner(new CachedValidationRegistry());
      41:  if (runner.IsValid(c))
      42:          ActiveRecordMediator<Customer>.Save(c);
      43:  else
      44:          foreach (string msg in runner.GetErrorSummary(c).ErrorMessages)
      45:                  Console.WriteLine(msg);

    利用ActiveRecordMediator类实现Repository模式

    ActiveRecordMediator类提供了SlicedFindAll方法,可以用此方法处理数据分页。

    首先创建IRepository接口

       1:  public interface IRepository<T>
       2:  {
       3:      void Save(T item);
       4:      void Remove(T item);
       5:      T FindById(object id);
       6:      T FindOne(params ICriterion[] criteria);
       7:      IEnumerable<T> FindBy(params ICriterion[] criteria);
       8:      IEnumerable<T> FindBy(out int count, params ICriterion[] criteria);
       9:      IEnumerable<T> FindBy(int pageSize, int pageCount,NHibernate.Criterion.Order[] order,out int count, params ICriterion[] criteria);
      10:  }
      11:   

    接口中包含了基本的Create,Update,Delete,Find方法,还包含了给定条件查询单体,给定条件查询list

    创建一个BaseRepository类

       1:  public class BaseRepository<T> : IRepository<T> where T : class
       2:  {
       3:      protected ActiveRecordMediator<T> mediator;
       4:      public virtual void Save(T item)
       5:      {
       6:          ActiveRecordMediator<T>.Save(item);
       7:      }
       8:   
       9:      public virtual void Remove(T item)
      10:      {
      11:          ActiveRecordMediator<T>.Delete(item);
      12:      }
      13:   
      14:      public virtual T FindById(object id)
      15:      {
      16:          return ActiveRecordMediator<T>.FindByPrimaryKey(id);
      17:      }
      18:   
      19:      public virtual T FindOne(params NHibernate.Criterion.ICriterion[] criteria)
      20:      {
      21:          return ActiveRecordMediator<T>.FindOne(criteria);
      22:      }
      23:   
      24:      public virtual IEnumerable<T> FindBy(params NHibernate.Criterion.ICriterion[] criteria)
      25:      {
      26:          return ActiveRecordMediator<T>.FindAll(criteria);
      27:      }
      28:   
      29:      public virtual IEnumerable<T> FindBy(int pageSize, int pageCount, NHibernate.Criterion.Order[] order, out int count, params NHibernate.Criterion.ICriterion[] criteria)
      30:      {
      31:          int _Count = 0;
      32:          _Count = ActiveRecordMediator<T>.FindAll(criteria).Count();
      33:          count = _Count;
      34:          return (IEnumerable<T>)ActiveRecordMediator<T>.SlicedFindAll(typeof(T), (pageSize - 1) * pageCount, pageCount, order, criteria);
      35:         
      36:      }
      37:   
      38:   
      39:      public virtual IEnumerable<T> FindBy(out int count, params NHibernate.Criterion.ICriterion[] criteria)
      40:      {
      41:          int _Count = 0;
      42:          _Count = ActiveRecordMediator<T>.FindAll(criteria).Count();
      43:          count = _Count;
      44:          return ActiveRecordMediator<T>.FindAll(criteria);
      45:      }
      46:  }
      47:   
      48:   

    创建Customer的资源库契约的具体实现类CustomerRepository

       1:  public class CustomerRepository : BaseRepository<Customer>
       2:  {
       3:      public override void Save(Customer item)
       4:      {
       5:          base.Save(item);
       6:      }
       7:      public override void Remove(Customer item)
       8:      {
       9:          base.Remove(item);
      10:      }
      11:      public override Customer FindById(object id)
      12:      {
      13:          return base.FindById(id);
      14:      }
      15:   
      16:      public override Customer FindOne(params NHibernate.Criterion.ICriterion[] criteria)
      17:      {
      18:          return base.FindOne(criteria);
      19:      }
      20:      public override IEnumerable<Customer> FindBy(params NHibernate.Criterion.ICriterion[] criteria)
      21:      {
      22:          return base.FindBy(criteria);
      23:      }
      24:   
      25:      public override IEnumerable<Customer> FindBy(out int count, params NHibernate.Criterion.ICriterion[] criteria)
      26:      {
      27:          return base.FindBy(out count, criteria);
      28:      }
      29:   
      30:      public override IEnumerable<Customer> FindBy(int pageSize, int pageCount, NHibernate.Criterion.Order[] order, out int count, params NHibernate.Criterion.ICriterion[] criteria)
      31:      {
      32:          return base.FindBy(pageSize, pageCount, order, out count, criteria);
      33:      }
      34:  }
      35:   
      36:   

    调用

       1:  int count=0;
       2:  var list1 = dal.FindBy(
       3:                  1,
       4:                  10,
       5:                  new[] { NHibernate.Criterion.Order.Desc("id") },
       6:                  out count, NHibernate.Criterion.Expression.Between("Age",20, 30));
       7:  foreach (var item in list1)
       8:  {
       9:      Response.Write(item.Id+"</br>");
      10:  }
  • 相关阅读:
    sublime如何自动保存
    什么是DQL、DML、DDL、DCL
    Linux Shall命令入门
    省市区地址三级联动jQuery插件Distpicker使用
    ThinkPHP3.2设置404跳转页面
    File.separator
    HiddenHttpMethodFilter
    SpringMVC环境搭建
    JVM介绍(一)
    some characters cannot be mapped using iso-8859-1 character encoding
  • 原文地址:https://www.cnblogs.com/whx1973/p/2846858.html
Copyright © 2011-2022 走看看