2014-02-05 70 views
1

我使用FluentNHibernate與AutoMapping和約定來創建我的數據庫。 我有3個表 - 人員,地址和工作如下所示。流利nHibernate的 - 展平實體ViewModel

//Database table 
    public class Person() 
    { 
    public virtual int Id { get; set; } 
    public virtual string FirestName { get; set; } 
    public virtual string SecondName { get; set; } 

    public virtual PersonAddress Address { get; set; } 
    public virtual PersonJob Job { get; set; } 
    } 

    //Database table 
    public class PersonAddress() 
    { 
    public virtual int Id { get; set; } 
    public virtual string AddressLine1 { get; set; } 
    public virtual string AddressLine2 { get; set; } 
    public virtual string AddressLine3 { get; set; } 
    } 

    //Database table 
    public class PersonJob() 
    { 
    public virtual int Id { get; set; } 
    public virtual int Description { get; set; } 
    } 

我想使用下面的扁平視圖模型在網格中顯示人員詳細信息列表。 我是否必須爲ViewModelPerson創建映射,儘管它不是數據庫表(Automapping會影響這個),還是應該使用nHibernate查詢來創建獲取ViewModelPerson實體列表。

//NOT database table - only used as ViewModel 
    public class ViewModelPerson() 
    { 
    public virtual int PersonId { get; set; } 
    public virtual string FirestName { get; set; } 
    public virtual string SecondName { get; set; } 

    //AddressLine1 + AddressLine2 + AddressLine3 
    public virtual int AddressId { get; set; } 
    public virtual string Address { get; set; } 

    public virtual int JobId { get; set; } 
    public virtual string Job { get; set; } 
    } 

回答

1

讓我給你我的觀點,我相信在進場...

數據層 - 映射EntityVSTable是相關的數據層。這只是一種方式,以後如何從NHibernate這樣的ORM工具中獲利。所有CRUD操作都是爲我們生成的 - 反映了映射。

演示層 - ViewModel,應該有助於我們「地圖」Entity(-ies)Client View。因此,在很多簡單的情況下,將會有:實體,表格,視圖模型... (例如CountryCurrency匹配1-1,我們準備在更復雜的場景中以不同的方式處理它。

上面的場景在一個視圖中顯示人員,地址,作業 - 是一個複雜的問題。我們可以通過間接填補ViewModel來獲利嗎?

建議:填寫ViewModel使用查詢到基本業務模式

我看到的第一個好處服務層上,是的ViewModelPerson人口在我們手中。它不是在映射內部修復的。我們可以減少數據(甚至用突起加載更少的數據),我們甚至可以擴展它(一些代碼表負荷市)的量

第二個好處是,如果我們將需要改變東西,例如引入Addresses的異步加載,我們必須變化它只從服務層UP(在MVC控制器,模型和視圖),而數據層(映射是不變)

+0

感謝您的響應 - I意在填補服務層上的ViewModel我不確定什麼是最好的查詢或方法。我使用正常的nHibernate查詢完成了它,然後使用AutoMapper從查詢結果中填充我的ViewModel。理想情況下,我喜歡使用Projections,但我沒有使用它們的經驗,查詢對我來說有點複雜。例如,ViewModel中Address的連接是有問題的。 – gisWeeper

+0

我明白了。但與NHibernate沒有其他選擇,然後嘗試,學習它;)這些是我可以給你開始實驗的最佳鏈接*(見下文)*。一旦你開始玩查詢,預測,變形金剛 - 請不要猶豫,在這裏問**,我相信你會得到幫助。所以:* 15。標準查詢* - http://nhforge.org/doc/nh/en/index.html#querycriteria,甚至更多類型安全* 16。QueryOver查詢* http://nhforge.org/doc/nh/en/index.html#queryqueryover。同時檢查這個* 19.1.5。使用批量抓取* http://nhforge.org/doc/nh/en/index.html#performance-fetching-batch –

+0

我的意思是,如果您有疑問並且不知道如何獲得幫助,您一定會在這裏獲得幫助繼續...一般教程很可能超出範圍。我想你明白我的意思。您可以查看http://stackoverflow.com/a/20970816/1679310或http://stackoverflow.com/a/19287008/1679310,也可以通過http://stackoverflow.com/questions查看查詢的強大功能。/20528760 / –