2012-01-14 3 views
0

У меня есть простой класс, как этотКак использовать метод Castle ActiveRecords FindOne()

[ActiveRecord("Subscriptions")] 
    public class Subscription : ActiveRecordBase<Subscription> 
    { 
     public Subscription() 
     { 

     } 

     public Subscription(string name) 
     { 
      this.Name = name; 
     } 

     [PrimaryKey(PrimaryKeyType.Native)] 
     private int Id { get; set; } 

     [Property] 
     public string Name { get; set; } 
} 

И я хочу, чтобы сделать простой поиск, используя метод FindOne(), который inheritd от базового класса. Похоже, что он использует NHibernate.Criterion.DetachedCriteria, но я не могу найти примеров.

ответ

1

это не очень сложно:

Subscription.FindOne(NHibernate.Criterion.Expression.Eq("Id",3)) 

С Expression-класса у вас есть все, что нужно, чтобы построить свой SQL/HQL/выбрать, вы просто должны гнезда снова и снова.

Subscription.FindOne(Expression.And(Expression.Eq(...),Expression.Eq(...))) 

Приветствия Juy Juka

2

Вы также можете использовать LINQ, я считаю, синтаксис LINQ гораздо более удобным для чтения:

// find the subscription with id = 3 
var subscription = Castle.ActiveRecord.Framework.ActiveRecordLinqBase<Subscription>.Queryable.SingleOrDefault(s => s.Id == 3); 

// find all the active subscriptions 
var activeSubscriptions = ActiveRecordLinqBase<Subscription>.Queryable.Where(s => s.IsActive); 

Если ваш класс наследует от ActiveRecordLinqBase вы можете просто написать:

// find the subscription with id = 3 
var subscription = Subscription.Queryable.SingleOrDefault(s => s.Id == 3); 

// find all the active subscriptions 
var activeSubscriptions = Subscription.Queryable.Where(s => s.IsActive);