Уровень данных SubSonic, который возвращает POCO вместо объектов ActiveRecord SubSonic

Я хочу использовать SubSonic (2.2) в приложении, которое я создаю, потому что мне нравится его простота и он обрабатывает любые типы запросов, которые я могу предвидеть в необходимости. В то же время я хочу, чтобы верхние уровни моего приложения были отделены от дозвуковых типов. Я хочу вернуть только простые старые объекты C #, а также передать POCO для сохранения.

Но вот загвоздка: я хочу, чтобы у моих POCO были свойства отложенной загрузки для дочерних коллекций и родительских объектов на основе отношений FK. Я полагаю, мне нужно как-то поместить объект Subsonic SqlQuery в частный член моего POCO и использовать его внутри в получателе для ленивого загруженного свойства.

Есть идеи о том, как реализовать это конкретно с SubSonic? Кто-нибудь делал это раньше?

Я действительно понимаю, что следующий крупный выпуск SubSonic будет делать это прямо из коробки, но, похоже, это произойдет как минимум через несколько месяцев.


person NathanD    schedule 21.01.2009    source источник


Ответы (4)


Я использую RepositoryRecord в SubSonic, который "в основном" poco. Затем я делаю партиалы для тех классов, которые загружают другой класс при выборе свойства.

Partial Public Class Book

Private _Author as Database.Author 
Property Author() as Database.Author
  Get
     If _Author is nothing then
       ' Load the author class here.
     End if
     return _Author
  End get
  Set
     ....
  End Set
End Property
End Class
person Rick Ratayczak    schedule 04.04.2009

Вы можете использовать атрибут:

tableBaseClass = "RepositoryRecord"

Боюсь, я не знаю, как это справляется с отложенной загрузкой. Вы можете увидеть сообщение Роба Конери об этом подробнее.

person Scott Muc    schedule 22.01.2009
comment
Я действительно пробовал этот вариант, но RepositoryRecord - это вещь SubSonic, и поэтому я все равно буду связан с Subsonic. Я также попытался указать свой собственный базовый класс как tableBaseClass, но это не сработало, так как я получил много ошибок сборки из сгенерированных файлов. - person NathanD; 03.02.2009

То, что вы хотите, отсутствует в версии 2.x. Возможно, вам удастся добиться большего, отредактировав шаблоны (у меня есть примеры отложенных свойств на моем блог). Другой вариант - создать ваши pocos, а затем построить классы для сопоставления из сгенерированных SubSonic классов и запросов к вашей модели.

person John Sheehan    schedule 04.02.2009

Не мог придумать, как это сделать. Subsonic 3 выглядит очень красиво и решит проблему, но пока мы просто пошел с NHibernate.

person NathanD    schedule 03.03.2009