1

J'utilise ServiceStack avec OrmLite et j'y ai eu beaucoup de succès jusqu'ici. Je suis à la recherche d'un moyen de filtrer les enregistrements «supprimés» lorsque vous utilisez AutoQuery. J'ai vu this suggestion pour utiliser une expression SqlExpression, mais je ne suis pas sûr où vous placeriez cela. Dans l'AppHost lorsque l'application démarre? Je l'ai fait, mais les enregistrements supprimés reviennent toujours. Mon objet de requête QueryDb dans ce cas est la suivante:Filtrage des suppressions logicielles avec AutoQuery

public class QueryableStore : QueryDb<StoreDto> 
{ 
} 

Autres SqlExpressions que j'ai utilisé sont dans la classe de dépôt lui-même, mais étant que j'utilise QueryDb et seul le message lui-même (pas tirant parti de ma classe référentiel Je n'ai aucun autre code en place pour gérer ces messages et filtrer ceux qui sont 'supprimés'.

J'ai aussi essayé d'utiliser une base de service personnalisé comme suggéré par this approach ainsi, en utilisant les éléments suivants:

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

Ce code est appelé, mais lorsque l'appel d'exécution je se passe-t obtiens une erreur:

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

La colonne F_isdeleted est un 'bit' dans SQL Server, et représenté comme bool dans mon POCO.

Des idées sur ce qui fonctionnerait ici? Je suis un peu perplexe que cela semble difficile à faire, mais les docs le rendent plutôt simple.

Répondre

0

Les {0} sont des espaces réservés pour les paramètres db, de sorte que votre SQL ne devrait utiliser des espaces réservés pour les paramètres DB, par exemple:

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

Sinon, si vous voulez utiliser la syntaxe SQL spécifique au serveur, vous pouvez utiliser:

q.And(IsDeleted + " = 0");