与Subsonic的一对一关系

时间:2009-07-19 04:49:49

标签: .net subsonic

如何在Subsonic中创建一对一的关系?例如,我有一个名为Readings的表,每个Reading只有一本书,但是Subsonic会返回IQueryable本书。我希望它只返回一本书。感谢。

2 个答案:

答案 0 :(得分: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 :(得分:1)

我所做的是创建一个像这样的部分类:

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

然后您可以直接访问Reading的子对象Book,而不是通过Iqueryable对象。

如果有人知道有更好的方法可以做到这一点,请告诉我,因为在经过多次努力之后我才能想到这一切。

编辑:忘记提及此部分类必须与生成的Subsonic模型位于同一名称空间