IMO, совершенно приемлемо сохранить вещи на сессии. Это - отличный способ сделать данные персистентными. Это также, во многих случаях, более безопасно, чем хранение всего в cookie. Вот несколько проблем:
У вас есть
References(x => x.Parent)
.Column("Parent");
Когда родительский элемент определен как
public virtual string Parent { get; set; }
Вы не можете ссылаться на строку (если это не элемент коллекции)