Если вам удастся отобразить этот класс UserSession, у него будут побочные эффекты.Рассмотрим этот код:
// assume that both user sessions share the same Application.
UserSession userSession1 = session.Get<UserSession>(1);
UserSession userSession2 = session.Get<UserSession>(2);
// what should happen here?
userSession1.ApplicationName = "Blah";
Возможно, вы не захотите менять имя приложения в своем коде.Однако ORM необходимо синхронизировать данные всегда в обоих направлениях, чтобы иметь смысл.
Вы можете решить проблему, фактически отобразив ее в том виде, как она есть в базе данных, например, сделав приложение реальной сущностью.
class UserSession
{
Application Application { get; private set; }
}
Если эта структура слишком сложна для вашего случая, попробуйте написать запрос, который возвращает данные по мере необходимости:
select session.Name, application.Name
from UserSession session join Application
Вы также можете создать новую структуру из запроса (select new ...
).Также взгляните на именованные запросы.