2009-07-19 61 views
3

如何在亞音速中創建一對一的關係?例如,我有我的桌子叫Readings,每個Reading只有一本書,但是Subsonic返回一本書的IQueryable。我希望它只返回一本書。謝謝。與亞音速的一對一關係

回答

1

我假設你使用ActiveRecord模板來生成你的代碼。

裏面ActiveRecord.tt,你會看到一個部分,看起來像這樣:

public IQueryable<<#=fk.OtherClass #>> <#=propName #> 
     { 
      get 
      { 
        var repo=<#=Namespace #>.<#=fk.OtherClass#>.GetRepo(); 
        return from items in repo.GetAll() 
         where items.<#=CleanUp(fk.OtherColumn)#> == _<#=CleanUp(fk.ThisColumn)#> 
         select items; 
      } 
     } 

這對於爲表上的每個外鍵生成的代碼模板。你需要修改這個部分,或者在這段代碼中加入一些邏輯,併爲你的一對一密鑰生成不同的東西。

希望能指引您朝着正確的方向發展。

1

我所做的就是創建一個部分類,像這樣:

public partial class Reading 
{ 
    private Book _book; 
    public Book Book 
    { 
     get 
     { 
      if (_book == null) 
       _book = this.Books.SingleOrDefault(); 
      { 
       return _book; 
      } 
     } 
     set 
     { 
      _book = value; 
     } 
    } 
} 

然後你就可以直接訪問閱讀的子對象的書,而不是通過IQueryable的對象。

如果有人知道更好的方法來做到這一點,請讓我知道,因爲這是我經過很多努力後才能想出的。

編輯:忘了提,這部分類必須是在相同的命名空間中產生亞音速機型