2009-07-19 73 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的对象。

如果有人知道更好的方法来做到这一点,请让我知道,因为这是我经过很多努力后才能想出的。

编辑:忘了提,这部分类必须是在相同的命名空间中产生亚音速机型