2010-04-28 75 views
2

我有一個名爲「用戶」,有一個名爲「刪除」,表示用戶從系統「刪除」(當然,實際上沒有刪除它)的布爾列的表。SubSonic生成的代碼,並始終過濾記錄

我也有很多表的FK到Users.user_id列。亞音速生成(非常漂亮)以類似的方式對所有的外鍵代碼:

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

任何想法?

回答

3

你需要在你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; 

      <#}#> 
    } 
} 
+0

@cmroanirgo - 結帳我更新的代碼和答案。 – Krunal 2010-04-29 05:36:09

+0

這就是我正在尋找的答案。我甚至沒有想到SubSonic可能已經有這個了! – cmroanirgo 2010-04-29 23:05:08

0

您使用的是Subsonic3嗎?如果是這樣,那麼你實際上可以編輯模板來修改數據訪問層類的生成方式。