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