2013-04-09 48 views
0

你好任何NHibernate的天才,NHibernate的如何將SQL查詢從多個表中獲取轉換爲QueryOver

一些幫助/指導將真正意識到,我有點卡住了!

我有以下的SQL查詢,我想轉換爲QueryOver,我不知道天氣它可以完成?任何幫助將不勝感激。

SQL:

Insert Into #categoryAndItems 
Select GlobalRateCategoryId,null,[Description],null, null,null, GlobalRateCategoryId, 2 From [GlobalRateCategory] 

Insert Into #categoryAndItems 
Select Id,Name, gr.[Description],un.[Description],null,gr.Formula,gr.GlobalRateCategoryId, 1 From dbo.[GlobalRateCategoryVariable] gr JOIN 
dbo.UnitOfMeasure un on gr.UnitOfMeasureId = un.UnitOfMeasureId 
JOIN [GlobalRateCategory] grc on grc.GlobalRateCategoryId = gr.GlobalRateCategoryId 

Insert Into #categoryAndItems 
Select gr.GlobalResourceId,null, gr.[Description], um.[Description], gr.Rate,grr.Formula, c.id, 0 From #categoryAndItems c JOIN 
GlobalRateResource grr on c.id = grr.GlobalRateCategoryId JOIN 
GlobalResource gr on grr.GlobalResourceId = gr.GlobalResourceId JOIN 
UnitOfMeasure um on gr.UnitOfMeasureId = um.UnitOfMeasureId 

Select * From #categoryAndItems 
order by groupid,id 
drop table #categoryAndItems 

回答

1

這不能被轉換爲QueryOver,但爲什麼不使用命名查詢和XML嵌入的資源,然後投射到一個DTO?

var results = Session 
    .GetNamedQuery("GetCategoriesAndItems") 
    .SetResultTransformer(
    new AliasToBeanResultTransformer(typeof(CategoryAndItemsDto))); 
return results.List<CategoryAndItemsDto>(); 

和你的DTO: -

public class CategoryAndItemsDto{ 
    public virtual int Id { get; set; } 
    public virtual string Description{ get; set; } 
... 
} 

這是嵌入式XML文件....

<?xml version="1.0" encoding="utf-8" ?> 
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"> 
    <sql-query name="GetCategoriesAndItems"> 
    Insert Into #categoryAndItems 
    Select ... 

    Insert Into #categoryAndItems 
    Select ... 

    Insert Into #categoryAndItems 
    Select ... 

    Select * From #categoryAndItems 
    order by groupid,id 

    drop table #categoryAndItems 
    </sql-query> 
</hibernate-mapping> 

確保你選擇*匹配返回的所有列名完全DTO中的列(請記住它是區分大小寫的)

並且拼圖告訴你流利的最後一點一個XML文件: -

sessionFactory = Fluently.Configure() 
.Mappings(m => 
{ 
    ... 
    m.HbmMappings.AddFromAssemblyOf<SomeEntityMap>(); 
}) 
.BuildSessionFactory(); 

注:SomeEntityMap是在包含XML嵌入的資源組裝一類。

+0

你好Rippo,感謝你的快速回復。我使用流暢的NHibernate進行數據庫映射。從我的研究中我得出結論,我將不得不從NHibernate執行原生SQL。有沒有更好的辦法?或者使用流利的NHibernate包含存儲過程的方法? – user2261609 2013-04-09 18:24:00

+0

是的請參閱編輯,您可以使用NamedQuery和嵌入式XML – Rippo 2013-04-10 07:32:11

+0

Hello Rippo,感謝您的快速響應和幫助。您的解決方案幫助我們謝謝。 – user2261609 2013-04-11 19:37:00