0

私はいくつかの冗長な主キーの問題を抱えています。Fluent NHibernate Duplicate Columns

私は多くのレポートを含む項目を持っています。私は以下のようにそれらをマップしました。私は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 [email protected];@p0 = 1266 [Type: Int32 (0)] 

答えて

3

これはnot a bug according to nhusers groupです。どうやらNHibernateは、IDに1つの列を使用し、外部キーには1つの列を使用します。いくつかの列が2回送信される場合もあります。このスレッドによれば、余分な列を最適化する価値はありません。なぜなら、追加のI/O使用を生成せず、通常の場合、余分な列がネットワークトラフィックをあまり引き起こさないからです。

+0

ありがとうございました。なぜそれは時々だけ起こるのですか?追加の列を生成しない他の関係もあります。これにより、挿入/更新クエリで問題が発生しますか?私はここでいくつかの投稿を見てきましたが、追加の列が生成されているため、マッピングによって挿入/更新が失敗していました。 – Origin

+0

@Origin nhusersグループのスレッドは、私は多くのプロジェクトでNHibernateを使用していましたが、私はこの種の問題を抱えていませんでした(挿入または更新のために追加の列を生成する)。私はNHibernateが非常に安定した製品であると考えます。 –

0

IないSEあなたの提示されたマッピングファイルのどこにでも 'reportdate'を置くことができます。それはあなたのクエリの中にありますので、私たちは現在表示されていないあなたのプロジェクトに他のマッピングがあると思われます。

+0

あなたは正しいです。それを取り除いていない私の間違い。フィールド名の中には機密性が高いものがあります。私はプロジェクトコードでそれらをコメントアウトし、エラーが余分なフィールドなしでまだ存在することを確認するためにテストしました。 – Origin