流畅的NHibernate重复列

时间:2011-12-28 05:32:35

标签: vb.net nhibernate fluent-nhibernate nhibernate-mapping fluent-nhibernate-mapping

我有一些多余的主键问题。

我有一个包含许多报告的项目。我已经映射了它们,如下所示。我可以Session.QueryOver(Of Item).List并且没有生成额外的列。我也可以Session.QueryOver(Of Report).List,并且没有生成额外的列。

但是,一旦我尝试遍历从Item到Reports的关系,我就会得到如下所示的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 个答案:

答案 0 :(得分:3)

这是not a bug according to nhusers group。显然,NHibernate使用一列作为ID,第二列使用外键。还有一些其他情况下,某些列被发送两次。根据该线程,优化额外的列是不值得的,因为它不会产生额外的I / O使用,并且在正常情况下额外的列不会导致过多的网络流量。

答案 1 :(得分:0)

我在你提供的映射文件的任何地方都没有看到'reportdate',而在你的查询中却有,因此我怀疑你的项目中还有其他我们目前看不到的映射?