ServiceStack自动查询全局过滤器

时间:2015-06-04 07:27:21

标签: c# servicestack ormlite-servicestack

我正在使用ServiceStack的AutoQuery功能,我有一些基本的查询工作。但是我想实现全局过滤器,因为我有一个多租户数据库,例如,

所有查询都应附加条件 CustomerId = Session.CustomerId

最好的方法是什么?

1 个答案:

答案 0 :(得分:2)

您可以使用custom AutoQuery base class将自定义过滤器附加到每个查询,例如:

public abstract class MyAutoQueryServiceBase : AutoQueryServiceBase
{
    public override object Exec<From>(IQuery<From> dto)
    {
        var q = AutoQuery.CreateQuery(dto, Request);
        var session = base.SessionAs<CustomUserSession>();
        q.And("CustomerId = {0}", session.CustomerId);

        return AutoQuery.Execute(dto, q);
    }

    public override object Exec<From, Into>(IQuery<From, Into> dto)
    {
        var q = AutoQuery.CreateQuery(dto, Request);
        var session = base.SessionAs<CustomUserSession>();
        q.And("CustomerId = {0}", session.CustomerId);

        return AutoQuery.Execute(dto, q);
    }
}

然后告诉AutoQuery使用您的基类,例如:

Plugins.Add(new AutoQueryFeature { 
    AutoQueryServiceBaseType = typeof(MyAutoQueryServiceBase)
});