我正在使用ServiceStack的AutoQuery功能,我有一些基本的查询工作。但是我想实现全局过滤器,因为我有一个多租户数据库,例如,
所有查询都应附加条件 CustomerId = Session.CustomerId
最好的方法是什么?
答案 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)
});