2

「DateCreated」というプロパティを含む抽象基本クラスがあります。いくつかの子クラスがあり、それらのいくつかは互いにリンクしています。

子クラスの 1 つに対してクエリを実行しようとすると、複数のテーブルに含まれているため、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結合プロパティがないため、機能しないと思います。

  1. にプレフィックス{alias}.を付けると、生成された SQL のDateCreatedプレフィックスになります。これは現在のテーブルのエイリアスですが、フィールド_thisを含む親テーブルのエイリアスではないため、列が見つかりません。DateCreated

  2. 生成された SQL で NHibernate が親テーブルに与えるエイリアスの前にプレフィックスthis_1_.を付けるDateCreatedと、クエリは機能しますが、それはおそらく悪い考えだと思います。

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 に含まれています。「{alias}」を使用すると「this_1」が出力され、エラーが発生します。

明らかに、そのエイリアスを指定する方法が必要です。

4

0 に答える 0