正如问题所述,我知道使用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视图似乎更方便,但要特别不返回需要隐藏的数据。所以喜欢..
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>
我意识到这不是宇宙中最好的例子,但是这样的事情可能吗?到目前为止,我还没有找到明确告诉对象不返回的任何方法。
答案 0 :(得分:3)
一如既往,ASP.NET MVC中所有内容的答案是:查看模型。因此,您获取存储库中的所有内容并返回包含所有属性的域Employee模型,然后将此Employee模型映射到EmployeeViewModel
。然后,此视图模型将传递给视图。当控制器在模型和视图模型之间根据用户进行映射时,它可能包含或不包含某些属性。