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