I have a base class DomainObject for all my business objects I am using with NHibernate. It contains the Id property.
DomainObject
Id
public abstract
To get real object instead of proxy you can use
session.PersistenceContext.Unproxy(proxyObject)
But I think you should look at Sharp architecture implementation for Equals.