Беглые столбцы NHibernate Duplicate - PullRequest
0 голосов
/ 28 декабря 2011

У меня возникли некоторые проблемы с первичным ключом.

У меня есть предмет, который содержит много отчетов. Я сопоставил их, как показано ниже. Я могу сделать 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)]

Ответы [ 2 ]

3 голосов
/ 28 декабря 2011

Это не ошибка согласно группе nhusers . Судя по всему, NHibernate использует один столбец для идентификатора и второй для внешнего ключа. Есть и другие случаи, когда некоторые столбцы отправляются дважды. Согласно потоку, не стоит оптимизировать дополнительный столбец, поскольку он не генерирует дополнительное использование ввода-вывода, а в обычных случаях дополнительный столбец не вызывает слишком большой сетевой трафик.

0 голосов
/ 28 декабря 2011

Я не вижу 'reportdate' в ваших представленных файлах сопоставлений, хотя он есть в вашем запросе, поэтому я подозреваю, что в вашем проекте есть другие сопоставления, которых мы в настоящее время не видим?

...