我有一个抽象基类,它包含一个名为“DateCreated”的属性;它有许多子类,其中一些是相互链接的。
当我尝试查询其中一个子类时,我在DateCreated中出现了一个模糊的列错误,因为它包含在多个表中。
以下是标准的摘录:
.SetProjection(Projections.ProjectionList()
.Add(Projections.GroupProperty(Item.LinkField + ".Id"), "Measure")
.Add(Projections.Count("Id"), "StatCount")
.Add(Projections.GroupProperty("lnk." + Item.LinkTextField), "MeasureText")
.Add(Projections.SqlGroupProjection("MONTH(DateCreated) As [period]", "MONTH(DateCreated)", new[] { "period" }, new IType[] { NHibernateUtil.Int32 })))
我有什么方法可以指定子类与其父类之间的连接的别名作为标准的一部分?我不认为CreateAlias
会起作用,因为没有连接属性。
如果我将前缀{alias}.
添加到DateCreated
,它将在生成的SQL中加前缀_this
,而这是当前表的别名,它不是别名包含DateCreated
字段的父表,因此找不到该列。
如果我将this_1_.
加到DateCreated
前面,这是NHibernate在生成的SQL中为父表提供的别名,则查询有效,但我认为这可能是一个坏主意。 / p>
以下是NHibernate生成的SQL:
SELECT TOP (5) this_.incidenttype_id AS y0_,
Count(this_.module_id) AS y1_,
lnk1_.dicttext AS y2_,
Month(this_1_.datecreated) AS [StatFrequency]
FROM tblincident this_
INNER JOIN tblmodule this_1_
ON this_.module_id = this_1_.id
INNER JOIN tbldict lnk1_
ON this_.incidenttype_id = lnk1_.id
LEFT OUTER JOIN tbldictcode lnk1_1_
ON lnk1_.id = lnk1_1_.dict_id
LEFT OUTER JOIN tbldictimage lnk1_2_
ON lnk1_.id = lnk1_2_.dict_id
LEFT OUTER JOIN tbldictsdscategory lnk1_3_
ON lnk1_.id = lnk1_3_.dictimage_id
WHERE this_1_.customer_id = 2
AND this_1_.isarchive = 0
AND this_1_.isactive = 1
AND this_1_.isconfidential = 0
AND this_.incidentdate BETWEEN '2012/01/01' AND '2013/04/01'
AND this_1_.isactive = 1
AND this_1_.customer_id = 2
AND this_1_.orgunit_id BETWEEN 3 AND 1000
GROUP BY this_.incidenttype_id,
lnk1_.dicttext,
Month(this_1_.datecreated)
在此示例中,tblIncident是tblModule的子类 DateCreated包含在tblModule中 上述标准工作的唯一原因是因为我传入了“this_1_”,因为它是由nhibernate自动分配给它的。使用“{alias}”会输出“this_1”,这会导致错误。
我显然想要一种指定别名的方法。