Nhiberate, несколько таблиц, один класс - PullRequest
1 голос
/ 11 июня 2010

Это спрашивали миллион раз, это как this .

Say Invoice - это базовый класс, а InvoiceHistory - это класс, который просто наследуется от Invoice.

КогдаЯ делаю что-то вроде invoiceList = session.CreateCriteria (typeof (Invoice)). List ();

Я получаю все из Invoice (что я хочу, плюс все из InvoiceHistory).

Do Iнужно иметь InvoiceBase и создавать производные версии для Invoice и InvoiceHistory?

Ответы [ 2 ]

2 голосов
/ 11 июня 2010

Я думаю, что это связано с полиморфизмом в NHibernate.Попробуйте указать polymorphism = "явный" в отображении для вашего базового класса (Invoice).

0 голосов
/ 11 июня 2010

Если вы не хотите получать историю счетов для наследования счетов, это не поможет.Даже создание InvoiceBase не поможет.Если вы используете наследование, nhibernate всегда будет возвращать самый сложный объект, который существует в базе данных.Таким образом, если в истории счетов есть внешний ключ, указывающий на счет, вы всегда получите объект счета, а не простой счет.Это фундаментальная особенность nhibernate.
Вы можете явно выбрать только свойства счета-фактуры и отобразить их вручную, используя ResultTransformer (см. Справочную информацию для получения дополнительной информации) или создать и отобразить объект SimpleInvoice, также ссылающийся на таблицу счетов, но споследнее, с которым вы можете столкнуться с некоторыми устаревшими проблемами, - это смешивание Invoice и SimpleInvoice в одном сеансе.Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...