0

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

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

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

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

4

1 回答 1

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);
于 2010-05-07T15:32:02.870 回答