使用NHibernate从投影中获取子类类型

使用NHibernate从投影中获取子类类型,nhibernate,types,projection,Nhibernate,Types,Projection,我正在尝试对名为Log的类型进行投影。日志引用名为公司的超类。每个公司类型都映射为每个子类的表 当我在日志上进行投影时,是否可以获得公司的类型? 我目前在每个子类上都有一个Enum属性(未映射),因此我可以在公司类型上执行切换,但由于它未映射到任何对象,因此我无法对其进行投影 我尝试过Projections.Property(“log.Company.class”),但不起作用:( PS:我找不到很多适合这个问题的标签。如果有人对更具体的标签有什么想法,请告诉我。你可以做以下事情 session

我正在尝试对名为Log的类型进行投影。日志引用名为公司的超类。每个公司类型都映射为每个子类的表

当我在日志上进行投影时,是否可以获得公司的类型? 我目前在每个子类上都有一个Enum属性(未映射),因此我可以在公司类型上执行切换,但由于它未映射到任何对象,因此我无法对其进行投影

我尝试过
Projections.Property(“log.Company.class”)
,但不起作用:(


PS:我找不到很多适合这个问题的标签。如果有人对更具体的标签有什么想法,请告诉我。

你可以做以下事情

session.CreateCriteria<Log>()
       .CreateAlias("Company", "company")
       .SetProjection(Projections.Property("company.class"))

这是可预测的吗?我的意思是,我可以将其转换为一个字符串(基本上就是我需要的)来显示公司类型吗?这是可预测的,但只有通过反向工程。我会为您需要的内容添加一个替代项。这看起来不错,但无论如何都不是一个连接,因为我使用每个子类的表?我会尝试一下:)嗯,它很管用。我只需要知道我是否可以使用整数作为引用,或者我必须通过会话将它们转换为正确的类名。我使用的是AliasToBeanConstructor transformer,在其中我将整数转换为我自己的显示名。但是如果我需要使用会话来转换它,我需要改变我的方法。当我有这种复杂的投影时,我使用.List,而不是使用AliasToBean,然后我用Linq映射到对象。顺便说一句,如果这对你有帮助的话,接受答案通常是很好的。。。
var logs = session.CreateCriteria<Log>()
                  .SetFetchMode("Company", FetchMode.Join) //avoid SELECT N+1
                  .List<Log>()
foreach (var log in logs)
    string companyClassName = session.GetEntityName(log.Company);