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

时间:2010-05-07 09:26:37

标签: nhibernate types projection

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

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

我尝试了Projections.Property("log.Company.class"),但这不起作用:(

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

1 个答案:

答案 0 :(得分:1)

您可以执行以下操作...

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

但该投影只能用于过滤和排序; NHibernate不会在结果集中返回System.Type(它返回一个在内部使用的整数)。

如果您需要了解公司的具体类型,您可以执行以下操作:

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);