Есть ли способ подделать столбец идентификатора в NHibernate?

Скажем, я сопоставляю простой объект с таблицей, содержащей повторяющиеся записи, и хочу разрешить дубликаты в своем коде. Мне не нужно обновлять/вставлять/удалять эту таблицу, только отображать записи.

Есть ли способ, которым я могу поместить поддельный (сгенерированный) столбец идентификатора в свой файл сопоставления, чтобы заставить NHibernate думать, что строки уникальны? Создание составного ключа не сработает, поскольку во всех столбцах могут быть дубликаты.

Если это невозможно, как лучше обойти эту проблему?

Спасибо!

Изменить: казалось, что Query - это путь


person Amy    schedule 03.11.2008    source источник


Ответы (2)


Отображение NHibernate предполагает, что вы захотите сохранить изменения, следовательно, требуется какой-либо идентификатор.

Если вам разрешено изменять таблицу, вы можете добавить столбец идентификаторов (имя SQL Server — ваша база данных может отличаться) для автоматического создания уникальных идентификаторов — существующий код не должен быть затронут.

Если вам разрешено добавлять в базу данных, но не в таблицу, вы можете попробовать определить представление, включающее синтетический (вычисляемый) столбец RowNumber, и использовать его в качестве источника данных для загрузки. В зависимости от поставщика вашей базы данных (и продуктов, обрабатывающих представления и индексы) это может привести к некоторым проблемам с производительностью.

Другой альтернативой, которую я не пробовал, было бы сопоставление вашего класса с запросом SQL вместо таблицы. IIRC, NHibernate поддерживает именованные SQL-запросы в файле сопоставления, и вы можете использовать их в качестве «источника данных» вместо таблицы или представления.

person Bevan    schedule 04.11.2008

Если ваши данные читаются только одним простым способом, который мы нашли, было обернуть запрос в представление и построить сущность из представления, а также добавить столбец newguid(), результат будет примерно таким

ВЫБЕРИТЕ NEWGUID() как ID, * ИЗ ТАБЛИЦЫ

Затем ID становится вашим уникальным первичным ключом. Как указано выше, это полезно только для представлений только для чтения. Поскольку идентификатор не имеет значения после запроса.

person Jafin    schedule 15.04.2009