При использовании ReferencesAny <> существует .EntityTypeColumn ("MyType"), который не отображается в приложении. Можно ли запросить этот столбец с помощью HQL или что-то еще и как интегрироваться в мои запросы LINQ to HQL?FluentNhibernate - запрос с отзывамиAny
ответ
Как просто сопоставить столбец в сущности, с которой вы ссылаетесь. Например, базовый класс для всех типов типов?
Как всегда, NHibernate имеет решение для (почти) все.
Давайте предположим, что отображение, как это (ala documentation):
ReferencesAny(x => x.AnyEntity) // the property name is AnyEntity... used below
// some explicit mapping
.AddMetaValue<Household>(typeof(Employee).Name)
.AddMetaValue<Client>(typeof(Contact).Name)
// the essence of <any>
.EntityTypeColumn("MyType")
.EntityIdentifierColumn("TheId")
.IdentityType<int>();
процитировать из дока: 14.7. The where clause:
Кроме того, особое свойство
class
обращается значение дискриминатора экземпляра в случай полиморфной персистенции. Имя класса .Net, встроенное в предложение where, будет переведено на его значение дискриминатора.
Итак, теперь мы сообщили, NHibernate, что colunn MyType
содержит type
, то эквив на C# type
. Потому что мы можем получить доступ к EntityTypeColumn через .class - этот запрос даст нам то, что мы хотим:
// the 'Contact' represents the value contained in DB...
var hql = "from MyEntity where AnyEntity.class = 'Contact' ";
...
session.CreateQuery(hql)
.List<MyEntity>();
это будет генерировать WHERE ... MyType = 'Контакт'
То же самое в QueryOver:
var query = session.QueryOver<MyEntity>()
.Where(x => x.AnyEntity is Contact)
.List<MyEntity>();
Примечание: плохие новости, что со встроенным поставщика LINQ, подобный запрос не удается. Я предполагаю, что это ошибка. То есть это не работает session.Query<MyEntity>().Where(x => x.AnyEntity is Contact)
, порождая неправильно ИНЕК
РАСПРОСТРАНЕНИЕ как просил в комментариях
Мы также можем фильтровать по <any>
элементы ID, то 'EntityIdentifierColumn'
Синтаксис будет выглядеть следующим образом (см магическая «.id» селектор ")
query
...
.Where(Restrictions.In("AnyEntity.id", new[] {1, 2, 3, 4, 5, 6, 7, 8}))
...
есть способ фильтрации с помощью EntityIdentifierColumn, отображаемого как «TheId» в этом примере? Как .Where (TheId in (listsOfIds))? – TiagoBrenck
Я продлил ответ. И да, это возможно. Нам нужен волшебный селектор «id»;) –
- 1. Почему этот запрос FluentNHibernate загружает все?
- 2. FluentNhibernate: запрос для получения отдельных значений
- 3. FluentNHibernate IDctionary с manytomany
- 4. FluentNHibernate Ошибка с ColumnName?
- 5. FluentNHibernate сопоставление с представлением
- 6. FluentNhibernate HasMany с компонентом
- 7. Помощи нужно с FluentNHibernate отображением
- 8. FLuentNhibernate + Automapping
- 9. FluentNhibernate TypeLoadException
- 10. NHibernate/FluentNhibernate session.CreateQuery help
- 11. Переписать SQL на FluentNHibernate
- 12. FluentNHibernate: LazyLoad и Fetch
- 13. Работа с встраиваемым в FluentNHibernate?
- 14. Переопределение классов NHibernate с FluentNHibernate
- 15. UnitTest FluentNhibernate с использованием PostgreSQLConfiguration
- 16. Как зарегистрировать FluentNHibernate с Ninject?
- 17. FluentNHibernate Lookup Table
- 18. Подключение к серверу sql с FluentNhibernate
- 19. Отображение FluentNHibernate с фильтром, возможно ли это?
- 20. FluentNHibernate HasManyToMany Условные сопоставления
- 21. FluentNHibernate RTM и NHibernate.Linq
- 22. WCF и FluentNHibernate
- 23. FluentNHibernate для словаря
- 24. fluentnhibernate: default_schema и Formula
- 25. FluentNHibernate присоединившийся подкласс
- 26. FluentNHibernate SaveOrUpdate error
- 27. FluentNHibernate SchemaUpdate не работает
- 28. Справочные таблицы в FluentNHibernate
- 29. FluentNhibernate и ссылки
- 30. FluentNhibernate + частный набор
Не уверен, что вы думаете. Не могли бы вы добавить образец. Просто быстро один? –
Я имею в виду, что если вы хотите получить доступ к этому столбцу, вам просто нужно добавить свойство к вашей сущности, на которое ссылаются ссылки ReferencesAny и сопоставить столбец с этим свойством ... – MichaC
Ах да .. это. Однако есть ли способ сделать это с помощью HQL и интегрироваться с LINQ to HQL? –