1

冗長な主キーの問題がいくつかあります。

多くのレポートを含むアイテムがあります。以下のようにマッピングしました。私はできますSession.QueryOver(Of Item).Listが、余分な列は生成されません。私もできますSession.QueryOver(Of Report).Listが、余分な列は生成されません。

ただし、アイテムからレポートへの関係をトラバースしようとすると、以下に示すSQLクエリが表示されます。誰か教えてもらえますか?前もって感謝します!

アイテムマッピング:

Public Class ItemMapping
    Inherits ClassMap(Of Item)
    Public Sub New()
        Table("Items")
        Id(Function(x) x.ItemID)
        HasMany(Function(x) x.Reports).KeyColumn("ItemID").Inverse().Cascade.All()
    End Sub
End Class

レポートマッピング:

Public Class ReportMapping
    Inherits ClassMap(Of Report)
    Public Sub New()
        Table("Reports")
        Id(Function(x) x.ReportID)
        References(Function(x) x.Item).Column("ItemID")
        Map(Function(x) x.ReportName)
    End Sub
End Class

SQL結果:

SELECT repor0_.ItemID as ItemID1_, 
repor0_.ReportID as Rep1_1_, 
repor0_.ReportID as Rep1_4_0_, 
repor0_.ReportName as Rep2_4_0_, 
repor0_.ItemID as ItemID4_0_ FROM dbo.Reports repor0_ WHERE repor0_.ItemID=@p0;@p0 = 1266 [Type: Int32 (0)]
4

2 に答える 2

4

nhusers グループによると、これはバグではありません。どうやら NHibernate は ID に 1 つの列を使用し、2 つ目の列を外部キーに使用するようです。一部の列が 2 回送信される場合もあります。スレッドによると、余分な列を最適化する価値はありません。これは、追加の I/O 使用量を生成せず、通常、余分な列によってネットワーク トラフィックがあまり発生しないためです。

于 2011-12-28T16:45:04.737 に答える
0

提示されたマッピング ファイルのどこにも 'reportdate' が表示されませんが、クエリには存在します。そのため、プロジェクトには現在表示されていない他のマッピングがあるのではないでしょうか?

于 2011-12-28T07:25:02.850 に答える