Можно ли сопоставить идентификатор с неизвестным типом в NHibernate? - PullRequest
1 голос
/ 16 января 2009

Мой текущий проект соединяется с двумя отдельными базами данных, практически идентичными во всех отношениях, за исключением первичных ключей. Используя NHibernate, возможно ли сопоставить идентификатор с каким-либо универсальным типом?

Прежде всего меня интересует отображение идентификатора в Int64 или Guid.

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

Спасибо

Пол

Ответы [ 2 ]

2 голосов
/ 16 января 2009

На случай, если кому-то интересно, я решил (взломал) это, используя тип объекта для всех идентификаторов. На самом деле NHibernate не позволяет вам отображать объект Int64 или Guid на объект, поэтому я решил эту проблему, не ссылаясь на него в файле отображения (не используя атрибут name в теге Id). Затем в DAO я просто вызываю session.GetIdentifier (...) и устанавливаю его. Это что-то вроде хака, но так как NHibernate в любом случае использует объект для ссылки на Id, я счастлив жить с ним.

Я все еще заинтересован в более красивом решении, если у кого-нибудь оно есть.

0 голосов
/ 28 января 2009

Может быть, написать собственный тип, который выполняет разбор строк для определения типа? Это не будет напрямую Int64 и Guid, но вы все равно можете сделать его более формальным. Затем добавьте несколько свойств, которые вы можете назвать как if (theobject.Id.IsInt) { /* do stuff with */ theObject.Id.GetInt(); }

(Пользовательские типы достаточно хорошо объяснены в документах Hibernate.)

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