Фильтрация с использованием Subsonic Active Record Child FK Objects - PullRequest
0 голосов
/ 08 декабря 2011

В некоторых ORM, если есть отношение один ко многим, класс, представляющий таблицу, обычно имеет один объект с именем столбца, например «Пользователь», и он заполняет свойство содержимым соответствующей строки таблицы.

Почему-то вместо этого Subsonic решил добавить свойство ColumnName с добавленной к нему буквой s.Он возвращает IQueryable вместо одного пользовательского объекта.

Как вы фильтруете результаты на основе некоторых свойств пользователя?

Я пытался сделать что-то вроде этого:

 FileRecord thumbnailImageRecord = newsArticleVersion.NewsArticleVersionFileMaps
            .SingleOrDefault(f => f.FileRecords.Single().FilePurpose == 3)
            .FileRecords.Single();

Есть ли лучший способ сделать это в ORM или мне просто нужно использовать пользовательский Linq?

1 Ответ

1 голос
/ 19 декабря 2011

Это, похоже, недостаток в SubSonic и достойный лучшего решения.

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

public partial class child {
  public parent parent {
    get { return parent.SingleOrDefault(x => this.parent_id == x.id); }
  }
}

Должно быть возможно сделать это более эффективно, изменив файл T4, если у вас есть смелость!

...