Индивидуальные отношения с Subsonic - PullRequest
3 голосов
/ 19 июля 2009

Как вы можете создать отношения один на один в Subsonic? Например, у меня есть таблица с именем «Чтения», и в каждом «Чтении» есть только одна книга, однако «Subsonic» возвращает IQueryable книг. Я хочу вернуть только одну книгу. Благодаря.

Ответы [ 2 ]

1 голос
/ 08 ноября 2009

Я создал частичный класс примерно так:

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

Затем вы можете напрямую получить доступ к дочернему объекту Book чтения, а не через объект Iqueryable.

Если кто-нибудь знает лучший способ сделать это, пожалуйста, дайте мне знать, так как это все, что я мог придумать после долгих попыток.

Редактировать: Забыл упомянуть, что этот частичный класс должен находиться в том же пространстве имен, что и сгенерированные дозвуковые модели

1 голос
/ 19 июля 2009

Я предполагаю, что вы используете шаблон 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;
            }
        }

Это шаблон для кода, который генерируется для каждого внешнего ключа в вашей таблице. Вам нужно будет изменить этот раздел и, возможно, наложить некоторую логику вокруг этого кода и сгенерировать что-то другое для ваших однозначных ключей.

Надеюсь, это направит вас в правильном направлении.

...