我正在使用ServiceStack和OrmLite,并且迄今为止取得了巨大的成功。我正在寻找一种在使用AutoQuery时过滤掉“软删除”记录的方法。我见过this suggestion使用SqlExpression,但我不知道你会把它放在哪里。应用程序启动时在AppHost中?我做到了,但删除的记录仍然返回。在这种情况下,我的QueryDb请求对象如下:
#bgimg img { width: 100%; }
我使用过的其他SqlExpressions都在存储库类本身,但是我正在使用QueryDb而只使用消息本身(不利用我的存储库类)我没有任何其他代码来处理这些消息并过滤掉“已删除”的内容。
我也尝试使用this approach建议的自定义服务基础,使用以下内容:
public class QueryableStore : QueryDb<StoreDto>
{
}
调用此代码,但是当Execute调用发生时,我收到错误:
public abstract class MyCustomServiceBase : AutoQueryServiceBase
{
private const string IsDeleted = "F_isdeleted";
public override object Exec<From>(IQueryDb<From> dto)
{
var q = AutoQuery.CreateQuery(dto, Request);
q.And("{0} = {1}", IsDeleted, 0);
return AutoQuery.Execute(dto, q);
}
public override object Exec<From, Into>(IQueryDb<From, Into> dto)
{
var q = AutoQuery.CreateQuery(dto, Request);
q.And("{0} = {1}", IsDeleted, 0);
return AutoQuery.Execute(dto, q);
}
}
F_isdeleted列是SQL Server中的“位”,在我的POCO中表示为bool。
关于什么在这里工作的任何想法?我有点不知所措,这似乎很难做到,但文档让它看起来很简单。
答案 0 :(得分:0)
{0}
是db参数的占位符,因此您的SQL应该只使用DB参数的占位符,例如:
var q = AutoQuery.CreateQuery(dto, Request);
q.And(IsDeleted + " = {0}", false);
否则,如果要使用特定于SQL Server的语法,可以使用:
q.And(IsDeleted + " = 0");