0

你好任何NHibernate天才,

一些帮助/指导将不胜感激,我有点卡住了!

我有以下 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
4

1 回答 1

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>

确保您的 select * 返回的所有列名与 DTO 中的列完全匹配(记住它区分大小写)

最后一点拼图告诉流利你有一个 XML 文件:-

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

注意:SomeEntityMap是程序集中包含 XML 嵌入资源的类。

于 2013-04-09T13:49:28.537 回答