1

I'm using ServiceStack with OrmLite, and having great success with it so far. I'm looking for a way to filter out 'soft deleted' records when using AutoQuery. I've seen this suggestion to use a SqlExpression, but I'm not sure where you would place that. In the AppHost when the application starts? I did that, but the deleted records still return. My QueryDb request object in this case is as follows:

public class QueryableStore : QueryDb<StoreDto>
{
} 

Other SqlExpressions I've used are in the repository class itself, but being that I'm using QueryDb and only the message itself (not leveraging my repository class) I don't have any other code in place to handle these messages and filter out the 'deleted' ones.

I've also tried using a custom service base as suggested by this approach as well, using the following:

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);
    }
} 

This code gets called, but when the Execute call happens I get an error:

System.ArgumentException:  'Conversion failed when converting the varchar value 'F_isdeleted' to data type int.'

The F_isdeleted column is a 'bit' in SQL Server, and represented as a bool in my POCO.

Any ideas on what would work here? I'm kind of at a loss that this seems this difficult to do, yet the docs make it look pretty simple.

StratMN
  • 161
  • 8

1 Answers1

0

The {0} are placeholders for db parameters, so your SQL should only be using placeholders for DB parameters, e.g:

var q = AutoQuery.CreateQuery(dto, Request);
q.And(IsDeleted + " = {0}", false);

Otherwise if you want to use SQL Server-specific syntax you can use:

q.And(IsDeleted + " = 0");
mythz
  • 141,670
  • 29
  • 246
  • 390