2012-01-14 56 views
0

我有一个简单的类像这样如何使用城堡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; } 
} 

我想要做的使用是一个从基类inheritd的FindOne()方法的简单的查找。它看起来像使用NHibernate.Criterion.DetachedCriteria,但我找不到任何示例。

回答

1

不是很复杂:

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

随着你拥有所有你需要建立你的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);