2012-02-16 63 views
0

如果我想從類的屬性創建一個DTO,所有這些都被映射,我可以在不寫常規SQL語句的情況下執行此操作嗎?是否可以在NHibernate中智能地映射DTO?

我見過很多關於製作DTO類的文檔,以及如何使用它,但沒有太多關於它如何創建。我已經看到用於Transformer的SQL查詢,但是需要使用魔術字符串。

編輯:

感謝您的意見。我知道有多種方法來檢索DTO,但我一直無法找到不使用SQL/HQL的方法的示例。有沒有參考的地方,或者是NHibernate那些稀少記錄的領域之一?

+0

'我見過用於Transformer的SQL查詢,但需要使用魔術字符串 - 這不是真的,您可以將HQL,SQL,Criteria,QueryOver和NH Linq轉換爲DTO ...什麼版本NH你正在使用,當你聰明地說你是什麼意思? – Rippo 2012-02-16 10:42:32

+0

「魔術串」並不意味着你認爲它的意思 – 2012-02-16 14:01:40

+0

謝謝@Rippo的建設性反饋。我的問題的關鍵是要澄清我的選擇是什麼。 Criteria/Queryover/Linq是否有任何參考?我似乎無法找到任何。 – Origin 2012-02-16 16:29:19

回答

5

從這裏你最新的評論是用QueryOverLinq

使用QueryOver突出的DTO的一些例子: - 使用NH LINQ提供

var schoolList = Session.QueryOver<lmschool>() 
     .SelectList(i => i 
     .Select(p => p.Name).WithAlias(() => dto.Name) 
     .Select(p => p.Lat).WithAlias(() => dto.Lat) 
     .Select(p => p.Lng).WithAlias(() => dto.Lng) 
     ) 
     .Where(w => w.Lat != null && w.Lng != null) 
     .TransformUsing(Transformers.AliasToBean<MarkerDto>()) 
     .List<MarkerDto>(); 

: -

var schoolList = (from school in Session.Query<lmschool>() 
     .Where(w => w.Lat != null && w.Lng != null) 
     select new LmSchoolMarkerDto { 
      Name = school.Name, 
        Lat = school.Lat, 
        Lng = school.Lng, 
     }).ToList(); 

來源是從my blog 另外,如果您需要查看如何使用多個連接,請參閱這blog post

也有很多S.O.應該幫助你的帖子,看到search

+0

謝謝你的迴應。這些例子正是我所期待的。巧合的是,我曾看過您的博客文章,並一直在引用它。大多數我在SO上看到關於使用NHibernate的DTO的帖子都是一般性問題,假設每個人都已經知道如何檢索它們。 – Origin 2012-02-17 15:56:07

0

您可以加載所有必需的實體並使用AutoMapper將它們更容易映射到DTO?

+0

AutoMapper是否可以與現有的數據庫結構一起工作? – Origin 2012-02-16 16:38:33