0

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

У меня есть элемент, который содержит много отчетов. Я сопоставил их, как показано ниже. Я могу сделать Session.QueryOver(Of Item).List, и никаких дополнительных столбцов не генерируется. Я также могу сделать Session.QueryOver(Of Report).List, и никаких дополнительных столбцов не генерируется.

Однако, как только я попытаюсь пересечь отношения из пункта в отчеты, я получаю запрос SQL, показанный ниже. Может ли кто-нибудь сказать мне, почему? Заранее спасибо!

Пункт Mapping:

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 

Mapping Report:

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 и второй для внешнего ключа. Существуют и другие случаи, когда некоторые столбцы отправляются дважды. В соответствии с этим потоком не стоит оптимизировать дополнительную колонку, поскольку она не генерирует дополнительное использование ввода-вывода, и в обычных случаях дополнительный столбец не вызывает слишком большого сетевого трафика.

+0

Большое спасибо за информацию. Почему это происходит иногда? У меня есть другие отношения, которые не генерируют дополнительные столбцы. Это вызовет проблемы с запросами на вставку/обновление? Я видел некоторые сообщения здесь, где сопоставление вызывало ошибку Insert/Update, потому что оно создавало дополнительные столбцы. – Origin

+0

@Origin. В ниве в группе nhusers перечислены некоторые случаи, когда это происходит. Я использую NHibernate во многих проектах, и у меня не было таких проблем (создание дополнительных колонок для вставки или обновления). Я считаю NHibernate очень стабильным продуктом. –

0

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

+0

Вы верны. Моя ошибка не снимать. Некоторые имена полей чувствительны. Я прокомментировал их в коде проекта и протестировал, чтобы подтвердить, что ошибка все еще существует без дополнительных полей. – Origin