【问题标题】:SubSonic generated code and always filtering recordsSubSonic 生成代码并始终过滤记录
【发布时间】:2010-04-28 06:31:02
【问题描述】:

我有一个名为“Users”的表,其中有一列名为“deleted”,这是一个布尔值,表示该用户已从系统中“删除”(当然,并未实际删除它)。

我也有很多表对 Users.user_id 列有一个 FK。 Subsonic 以类似的方式(非常好)为所有外键生成代码:

    public IQueryable<person> user
    {
        get
        {
              var repo=user.GetRepo();
              return from items in repo.GetAll()
                   where items.user_id == _user_id
                   select items;
        }
    }

虽然这很好,但有没有办法生成代码以始终过滤掉“已删除”用户?

在这里的办公室里,我们能想到的唯一建议是使用部分类并对其进行扩展。当有很多类使用 User 表时,这显然是一种痛苦,更不用说很容易在不经意间使用错误的属性(本例中为 User 与 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;
        }
    }

有什么想法吗?

【问题讨论】:

    标签: subsonic subsonic-active-record


    【解决方案1】:

    您需要更改 ActiveRecord.tt 文件中的以下代码并重新生成代码:

    以下是代码位于:#region ' Foreign Keys '

    更新:我已经更新了您的评论代码,用于检查删除列是否可用,然后仅应用删除条件。

    HasLogicalDelete() - 如果表有“已删除”或“已删除”列,此函数将返回 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;
    
              <#}#>
        }
    }
    

    【讨论】:

    • 这正是我正在寻找的答案。我什至没有开始认为 SubSonic 可能已经有了这个!
    【解决方案2】:

    您使用的是 Subsonic3 吗?如果是这样,那么您实际上可以编辑模板来修改数据访问层类的生成方式。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-04-10
      • 1970-01-01
      • 2010-10-25
      • 1970-01-01
      • 1970-01-01
      • 2022-08-15
      • 1970-01-01
      相关资源
      最近更新 更多