Сделайте дружественную маскировку DAL на основе Nhibernate - PullRequest
2 голосов
/ 01 мая 2009

Я хочу запутать слой доступа к данным, который написан с использованием NHibernate. Проблема заключается в том, что сопоставления выполняются в файлах XML, которые встраиваются в виде ресурсов в библиотеку классов - это означает, что сопоставления находятся в открытом тексте.

Два возможных решения: 1. Атрибуты Nhibernate Mapping (NHMA) для декорирования отображаемых сущностей (поэтому, когда запускается запутанный код, NHibernate сопоставит его с обфусцированными именами классов) 2. Свободный NHibernate (опять же, отображение в коде, поэтому запутывание не должно быть проблемой - я думаю).

Теперь оба эти решения не будут работать, если мы будем использовать HQL для выполнения запросов - поскольку запросы будут ссылаться на исходные имена классов и полей / свойств!

Есть ли решение для этого? Можем ли мы иметь псевдонимы классов / свойств в сопоставлениях NHMA / Fluent?

Поможет ли API Criteria API, если мы конвертируем HQL-запросы в API-интерфейс NHibernate?

(Я знаю преимущества и недостатки / бесполезность запутывания и цель, для которой это полезно - поэтому этот вопрос вовсе не предназначен для обсуждения этого. Другими словами, пожалуйста, не беспокойтесь о обсуждении «почему», я хочу сделай это!)

Спасибо

Кришна.

Ответы [ 2 ]

1 голос
/ 03 мая 2009

Единственное решение, которое я могу придумать, - это использовать Linq для NHibernate. В настоящее время он является частью NHibernate Contrib Project и не является полностью стабильным. Он будет частью выпуска NHibernate 2.1, который в настоящее время имеет статус «Альфа» и скоро должен стать стабильным довольно .

Для сопоставления я бы использовал Fluent NHibernate. А поскольку и Linq, и Fluent NHibernate используют лямбда-выражения, он должен работать с запутыванием.

0 голосов
/ 04 мая 2009

NHibernate Configuration объект довольно гибкий. По телефону:

var lConfig = new Configuration();
lConfig.AddXmlString("whatever xml with config");

Вы можете добавлять строки из любого источника. Это означает, что ваши xmls могут быть зашифрованы в сборке и расшифрованы при настройке NH.

Но если вы только что запутались, я думаю, Fluent NH - ваш выбор.

...