私は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_isdeleted列はSQL Serverの「ビット」で、POCOのboolとして表されます。
ここではどのようなアイデアがありますか?私はこれをやるのが難しいように思えますが、ドキュメントではかなりシンプルに見えます。