Лучший способ отобразить скрытое свойство в NHibernate (свободно) - PullRequest
1 голос
/ 27 мая 2011

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

Некоторый фон В настоящее время у меня есть класс, который отображает свойство частной строки в столбец геометрии в таблице базы данных PostgreSQL (PostGIS) вместе с открытой строкой для WKT. WKT используется PostGIS для автоматического обновления столбца геометрии с помощью триггера. Поскольку я не хочу включать какие-либо пространственные привязки в мою модель предметной области, все запросы выполняются с использованием строк WKT и пользовательского пространственного критерия, который оборачивает WKT в пространственную функцию PostGIS и запрашивает ссылку на столбец свойства частной геометрии. Все это работает как положено.

Вопрос Так как мне нужна ссылка на столбец, мне также нужно свойство в моей доменной модели, чтобы NHibernate соответствовал, поэтому мне было интересно, каким будет лучшее решение для NHibernate, чтобы никогда не выбирал это свойство.

Мое текущее решение выглядит следующим образом с Fluent NHibernate:

Map(Reveal.Member<LocationReference>("Geometry"), "geometry")
    .Generated.Always()
    .ReadOnly()
    .LazyLoad();

Это делает трюк, и когда я выбираю сущность, я не получу свойство, если я не загружу его вручную (что невозможно через лямбда-расширения). К сожалению, я все еще смогу выполнить Criteria или HQL-запрос для этого свойства.

Так есть ли для меня какие-либо способы сделать что-либо, что не дает NHibernate возможность когда-либо включать столбец в выбор? Или приведенное выше решение является единственным способом, по крайней мере, игнорировать столбец при выборе с помощью Query<> или QueryOver<>?

1 Ответ

0 голосов
/ 01 июня 2011

Что ж, я закончил тем, что удалил сопоставленное свойство, потому что, хотя оно и было ленивым, NHibernate иногда все равно загружал его.То, что я сделал, было на самом деле немного взломом.Мне нужен был псевдоним для свойства из того же класса, поэтому я использовал сопоставление из другого свойства и разделил SqlString на '.', чтобы получить правильный псевдоним.

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

Полагаю, я много хакерских атак, просто чтобы не ссылаться на NHibernate.Spatial...

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