Я думаю, вы ошибаетесь в том, что делает Load
.Это создаст для вас прокси-объект NHibernate по идентификатору без фактического запроса к базе данных.
Когда вы вызываете свойство, оно запрашивает базу данных, если вы указали неверный идентификатор, то нет базового объекта, следовательно исключение.*
Нормальные ситуации, которые вы будете использовать, это то, что вы говорите, что у вас есть объект State и пользователь выбрал PA в раскрывающемся списке.Вместо того, чтобы запрашивать базу данных для объекта State, так как у вас уже есть ключ PA, вы можете вызвать Load
и затем передать этот объект состояния в другой объект, чтобы иметь правильное отношение объекта X к состоянию PA.
Метод, который вы хотите использовать для общего получения или получения нулевого значения, если ключ не существует, это просто Session.Get<T>(object ID)