1

私はOrmLiteでServiceStackを使用しており、これまでに大きな成功を収めています。 AutoQueryを使用しているときに「ソフト削除された」レコードをフィルタリングする方法を探しています。私はthis suggestionがSqlExpressionを使用するのを見たことがありますが、どこに置くのかは分かりません。アプリケーションが起動するAppHostでは?私はそれをしましたが、削除されたレコードはまだ返されます。この場合、以下のように私のQueryDb要求オブジェクトは、次のとおりです。AutoQueryを使用したソフト削除のフィルタリング

public class QueryableStore : QueryDb<StoreDto> 
{ 
} 

私が使用した他のSqlExpressionsは、リポジトリクラス自体にあるが、私はQueryDbを使用していますし、唯一のメッセージ自体は(私のリポジトリクラスを活用していないということで)私はこれらのメッセージを処理し、「削除された」ものをフィルタリングするために、他のコードを用意していません。

私も同様 this approachにより示唆されるように、以下の使用して、カスタムサービス基盤を使用して試した

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

このコードは呼び出されますが、コールを実行したときに、私はエラーを取得する行われます

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

F_is​​deleted列はSQL Serverの「ビット」で、POCOのboolとして表されます。

ここではどのようなアイデアがありますか?私はこれをやるのが難しいように思えますが、ドキュメントではかなりシンプルに見えます。

答えて

0

{0}はので、あなたのSQLのみ例えば、DBパラメータのプレースホルダを使用する必要があり、DBパラメータのプレースホルダです:あなたが使用できるSQL Server固有の構文を使用したい場合はそうでない

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

q.And(IsDeleted + " = 0"); 
関連する問題