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





Если кому-то интересно, я решил (взломал) это, используя тип объекта для всех идентификаторов. NHibernate на самом деле не позволяет вам сопоставлять Int64 или Guid с объектом, поэтому я обошел это, не ссылаясь на него в файле сопоставления (не используя атрибут name в теге Id). Затем в DAO я просто вызываю session.GetIdentifier (...) и устанавливаю его. Это немного похоже на взлом, но поскольку NHibernate в любом случае использует объект для ссылки на Id, я счастлив жить с ним.
Меня все еще интересует более красивое решение, если оно у кого-то есть.
Может быть, написать собственный тип, который выполняет синтаксический анализ строк для определения типа? Это все равно не будет напрямую Int64 и Guid, но вы все равно можете сделать его более формальным. Затем добавьте несколько свойств, которые можно назвать if (theobject.Id.IsInt) { /* do stuff with */ theObject.Id.GetInt(); }.
(Пользовательские типы довольно хорошо описаны в документации по Hibernate.)