2012-01-14 29 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);