我正在尝试对名为日志的类型进行投影。日志引用名为公司的超类。每个公司类型都使用每个子类的表进行映射。
当我对日志进行投影时,是否可以获得公司的类型? 我目前在每个子类上都有一个Enum属性(未映射),因此我可以对公司类型执行切换,但由于它没有映射到任何东西,我无法对其进行投影。
我尝试了Projections.Property("log.Company.class")
,但这不起作用:(
PS:我找不到这个问题的很多合适的标签。如果有人想知道更具体的标签,请告诉我。
答案 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);