2

Я использую FluentNHibernate для доступа к моей базе данных. Я хотел бы реализовать следующее - только требуемые свойства моего объекта должны быть заполнены. Например, в одном случае все свойства должны быть заполнены, во втором случае репозиторий должен возвращать объект только с идентификаторами и свойствами имени. Имеет ли смысл?Как заполнить только необходимые свойства объекта (FluentNHibernate)

Я вижу, когда я могу реализовать несколько сопоставлений для сущности - каждое отображение в соответствии с случаем. Затем я получаю несколько ISessionFactory'ies - репозиторий использует требуемый ISessionFactory для покрытия требуемого случая. Хм .. но я не уверен, что это правильное решение.

+0

пока я не знаю, с Fluent NHibernate вы просто настроить отображение с проверкой баз данных и нет. Вы сопоставляете поле с нулевым значением: «Карта (x => x.Name) .Not.Nullable();'. Вы можете опубликовать некоторый код, о котором мы больше понимаем. –

ответ

2

просто создать специализированный DTOS ViewModels для каждого сценария и выбрать непосредственно в них

using NHibernate.Linq; 

var user = session.Query<User>() 
    .Where(user => user.Name == someName) 
    .Select(user => new LoginUser(user.Id, user.Name)) 
    .FirstOrDefault(); 
+0

I.e. в вашем случае Пользовательский репозиторий заполняет только свойства имени и имени, другие свойства будут пустыми/по умолчанию. Правильно? –

+0

Я никогда не реализовывал хранилище на вершине NH. Я использую ISession как мой репозиторий. LoginUser - это специальный класс для одного случая использования, который имеет только те свойства, которые ему нужны, то есть Id и Name. Показанный запрос используется так же, как и встроен LoginScreen. – Firo

+0

Хорошо. Только один вопрос. Извините, но я хочу понять. В приведенном выше примере создайте запрос к таблице базы данных пользователей, чтобы получить значения Id и Name и создать новое LiginUser dto. Этот запрос (к таблице базы данных) будет содержать только столбцы «Идентификатор», «Имя» или «Нет»? То есть это как - Выберите u.Id, u.Name From [dbo]. [Пользователь] u ??? –

0

Что вы ищете, называется «проекции», но проекционный объект должен быть другим объектом, а не самим объектом. NHibernate поддерживает выходы из книг. Have a look at docs.

Смежные вопросы