nHibernate,我可以把它告诉Fetch <t>,但我可以告诉它要保持<t>吗?</t> </t>

时间:2011-03-22 18:27:13

标签: security nhibernate asp.net-mvc-3 fluent-nhibernate

正如问题所述,我知道使用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正在查看自己的个人资料,我希望能够呈现AddressSalary。但如果一个不同的员工正在寻找呢?构建一个ASP.NET MVC视图似乎更方便,但要特别不返回需要隐藏的数据。所以喜欢..

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 个答案:

答案 0 :(得分:3)

一如既往,ASP.NET MVC中所有内容的答案是:查看模型。因此,您获取存储库中的所有内容并返回包含所有属性的域Employee模型,然后将此Employee模型映射到EmployeeViewModel。然后,此视图模型将传递给视图。当控制器在模型和视图模型之间根据用户进行映射时,它可能包含或不包含某些属性。