如何使用Castle ActiveRecord FindOne()方法

时间:2012-01-14 05:53:59

标签: castle-activerecord

我有一个像这样的简单类

    [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()方法进行简单查找。看起来它使用NHibernate.Criterion.DetachedCriteria,但我找不到任何例子。

2 个答案:

答案 0 :(得分: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);

答案 1 :(得分:1)

它不是很复杂:

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

使用Expression-class,你可以拥有构建sql / hql / select所需的所有东西,你只需要反复嵌套它。

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

问候 Juy Juka