Получить тип подкласса из проекции с помощью NHibernate - PullRequest
0 голосов
/ 07 мая 2010

Я пытаюсь сделать прогноз для типа с именем Log . Журнал ссылается на суперкласс Company . Каждый тип компании сопоставляется с таблицей для каждого подкласса.

Могу ли я получить тип Company , когда я делаю прогноз на Log ? В настоящее время у меня есть свойство Enum (которое не сопоставлено) для каждого подкласса, поэтому я могу выполнять переключение для типов компаний, но, поскольку оно не сопоставлено ни с чем, я не могу выполнить проекцию на него.

Я пытался Projections.Property("log.Company.class"), но это не работает: (

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

1 Ответ

1 голос
/ 07 мая 2010

Вы можете сделать следующее ...

session.CreateCriteria<Log>()
       .CreateAlias("Company", "company")
       .SetProjection(Projections.Property("company.class"))

Но эта проекция может использоваться только для фильтрации и упорядочения; NHibernate не будет возвращать System.Type в наборе результатов (он возвращает целое число, которое используется внутри).

Если вам нужно знать конкретный тип компании, вы можете сделать следующее:

var logs = session.CreateCriteria<Log>()
                  .SetFetchMode("Company", FetchMode.Join) //avoid SELECT N+1
                  .List<Log>()

И затем, чтобы получить тип для каждой строки:

foreach (var log in logs)
    string companyClassName = session.GetEntityName(log.Company);
...