亜音速生成コードと常にフィルタリングレコード
-
02-10-2019 - |
質問
「deleted」という列がある「ユーザー」と呼ばれるテーブルがあります。これは、ユーザーがシステムから「削除」されていることを示すブール値です(もちろん、実際に削除することなく)。
また、users.user_id列にFKを備えたテーブルもたくさんあります。亜音波は、すべての外国の鍵のコードを同様の方法で(非常にうまく)生成します。
public IQueryable<person> user
{
get
{
var repo=user.GetRepo();
return from items in repo.GetAll()
where items.user_id == _user_id
select items;
}
}
これは良いものであり、すべてですが、「削除された」ユーザーも常に除外するような方法でコードを生成する方法はありますか?
ここのオフィスでは、私たちが考えることができる唯一の提案は、部分的なクラスを使用して拡張することです。これは、ユーザーテーブルを使用しているクラスがたくさんある場合、明らかに痛みですが、間違ったプロパティを不注意に使用するのが簡単であるという事実は言うまでもありません(この例ではユーザーvs ActiveUser):
public IQueryable<User> ActiveUser
{
get
{
var repo=User.GetRepo();
return from items in repo.GetAll()
where items.user_id == _user_id and items.deleted == 0
select items;
}
}
何か案は?
解決
Activerecord.ttファイルで次のコードを変更し、コードを再生する必要があります。
次のISコードは以下にあります: #region ' Foreign Keys '
アップデート: 削除列が利用可能であるかどうかを確認するためのコメントのコードを更新しました。削除条件のみを適用します。
HasLogicalDelete()
-この関数は、テーブルに「削除」または「isDeleted」列がfalseの場合、trueを返します。
public IQueryable<<#=fk.OtherClass #>> <#=propName #>
{
get
{
var repo=<#=Namespace #>.<#=fk.OtherClass#>.GetRepo();
<#if(tbl.HasLogicalDelete()){#>
return from items in repo.GetAll()
where items.<#=CleanUp(fk.OtherColumn)#> == _<#=CleanUp(fk.ThisColumn)#> && items.deleted == 0
select items;
<#}else{#>
return from items in repo.GetAll()
where items.<#=CleanUp(fk.OtherColumn)#> == _<#=CleanUp(fk.ThisColumn)#>
select items;
<#}#>
}
}
他のヒント
subsonic3を使用していますか?もしそうなら、実際にテンプレートを編集して、データアクセスレイヤークラスの生成方法を変更できます。
所属していません StackOverflow