nHibernate, я могу сказать это Fetch <T>, но я могу сказать это, чтобы остаться <T>? - PullRequest
3 голосов
/ 22 марта 2011

Так же, как говорится в вопросе, я знаю, что используя NHinbernate, я могу задать конкретный запрос Fetch(Func<T,bool>) и даже FetchMany().Но что, если я захочу поступить наоборот?

Например, скажем, у нас есть класс ..

class Employee {
  public virtual string Name { get; set; }
  public virtual Address Address { get; set; }
  public virtual double Salary { get; set; }
}

Если Employee смотрит на свой собственный профиль, я бы хотел Address и Salaryбыть оказанным.Но что, если другой сотрудник ищет?Казалось бы, удобнее создать один ASP.NET MVC View, но специально не возвращать данные, которые необходимо скрыть.Вот как ..

if( // myself // ) {
   return employee = session.Query<Employee>()
       .Fetch(context => context.Address)
       .Take(1)
       .SingleOrDefault();
}
else
   return employee = session.Query<Employee>()
       .Deny(context => context.Address)
       .Deny(context => context.Salary)
       .Take(1)
       .SingleOrDefault();

Тогда мой взгляд может выглядеть следующим образом:

@model Employee

<h2>@Model.Name</h2>
<h4>@Html.DisplayFor( model => model.Address )</h4>
<h4>@Model.Salary</h4>

Я понимаю, что это не лучший пример во вселенной, но возможна ли такая вещь?До сих пор я не нашел методов, которые бы явно указывали объекту не возвращаться.

1 Ответ

3 голосов
/ 22 марта 2011

Как всегда ответ на все вопросы в ASP.NET MVC таков: просмотр моделей .Таким образом, вы извлекаете все в своем хранилище и возвращаете модель Employee, содержащую все свойства, а затем сопоставляете эту модель Employee с EmployeeViewModel.Именно тогда эта модель представления будет передана в представление.А когда контроллер сопоставляет модель и модель представления в зависимости от пользователя, он может включать или не включать некоторые свойства.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...