There's no way that I know of for NHibernate to work with a table where rows are not guaranteed to be unique be either a surrogate key (primary key) or a natural key (joined primary keys). If you can't find a way to identify one row from another, you'll likely have trouble with any ORM solution.
If I have a table like:
Code:
==name== ==email=== ==age===
john jkl@hp.com 32
sue sue@hp.com 27
mike mj@nike.us 41
... and there's no definitive way to know that row2 != row1, I would have to scan all the fields in all the rows looking for duplicates, or put the rows in different sets of Hashtables to find duplicates. That would be horrendously slow! It just won't work. And how would you look up mike's row, by name? If there's a primary key column, indexed and unique,
Code:
select * from faketable where id = 3
is much faster than
Code:
select * from faketable where name='mike' and email='mj@nike.us' and age=41
Now you've given the select statement all the info you needed to retrieve, making the query pointless. Also, the DB has to scan the value of all those fields to find the value you've given, rather that getting a match from an index.
Tables without primary or composite keys just won't work - that's why NHibernate requires it.