2011-03-22 120 views
3

正如問題所述,我知道使用NHinbernate我可以告訴一個具體的查詢Fetch(Func<T,bool>),甚至FetchMany()。但是如果我想以相反的方式做呢?nHibernate,我可以告訴它去取<T>,但我可以告訴它保持<T>?

例如,讓我們說,我們有一個類..

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> 

我知道這是不是在宇宙中最好的例子,但這樣的事情可能嗎?到目前爲止,我還沒有找到任何明確告訴對象不返回的方法。

+0

+1狗笑話 – Martin 2011-03-22 18:31:32

回答

3

一如既往,ASP.NET MVC中所有內容的答案是:查看模型。因此,您可以獲取存儲庫中的所有內容,並返回包含所有屬性的域Employee模型,然後將此Employee模型映射到EmployeeViewModel。那麼這個視圖模型將被傳遞給視圖。當控制器根據用戶在模型和視圖模型之間進行映射時,它可能包含或不包含某些屬性。

+0

是的,我可以將它抽象成視圖模型,我想如果我可以在數據端完全停止額外的查詢,它會更有效率。這就好像在說:「好吧,從這所房子裏拿出所有東西,但是當你回來時,我只需要一件東西。」 – Ciel 2011-03-22 18:50:41

相關問題