Subsonic 亚音速生成代码并始终过滤记录
我有一个名为Users的表,它有一个名为deleted的列,这是一个布尔值,表示用户已从系统中删除,当然没有实际删除它 我还有很多表,其中有一个FK到Users.user\u id列。亚音速以类似的方式很好地为所有外键生成代码:Subsonic 亚音速生成代码并始终过滤记录,subsonic,subsonic-active-record,Subsonic,Subsonic Active Record,我有一个名为Users的表,它有一个名为deleted的列,这是一个布尔值,表示用户已从系统中删除,当然没有实际删除它 我还有很多表,其中有一个FK到Users.user\u id列。亚音速以类似的方式很好地为所有外键生成代码: public IQueryable<person> user { get { var repo=user.GetRepo(); return from i
public IQueryable<person> user
{
get
{
var repo=user.GetRepo();
return from items in repo.GetAll()
where items.user_id == _user_id
select items;
}
}
虽然这很好,但是否有一种方法可以生成代码,从而始终过滤掉已删除的用户
在这里的办公室里,我们能想到的唯一建议是使用分部类并扩展它。当有很多类使用用户表时,这显然是一种痛苦,更不用说在本例中很容易无意中使用错误的属性User 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;
}
}
有什么想法吗?你在用亚音速3吗?如果是这样,则您可以实际编辑模板以修改数据访问层类的生成方式。您需要更改ActiveRecord.tt文件中的以下代码并重新生成代码: 以下代码位于:区域“外键” 更新:我已经为您的评论更新了代码,用于检查删除列是否可用,然后仅应用删除条件 HasLogicalDelete-如果表已删除或isdeleted列,此函数将返回true,否则返回false
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;
<#}#>
}
}
这正是我想要的答案。我甚至没有想到亚音速可能已经有了这个!