.net FluentNHibernate有许多不持久的外键

.net FluentNHibernate有许多不持久的外键,.net,nhibernate,fluent-nhibernate,.net,Nhibernate,Fluent Nhibernate,我在这里被难住了。。。我得到了一个我认为非常简单的集合,我正在使用FluentNHibernate的HasMany函数映射该集合,虽然所有子级显式设置的属性都在保存,但外键值却没有。以下是我删除了无关数据的类和映射: Public Class OrderForm Private _sections As ICollection(Of OrderSection) Public Sub New() _sections = New List(Of OrderSecti

我在这里被难住了。。。我得到了一个我认为非常简单的集合,我正在使用FluentNHibernate的HasMany函数映射该集合,虽然所有子级显式设置的属性都在保存,但外键值却没有。以下是我删除了无关数据的类和映射:

Public Class OrderForm
    Private _sections As ICollection(Of OrderSection)

    Public Sub New()
        _sections = New List(Of OrderSection)
    End Sub

    Public Overridable Property Id As Integer

    Public Overridable ReadOnly Property Sections As ICollection(Of OrderSection)
        Get
            Return _sections
        End Get
    End Property
End Class

Public Class OrderSection
    Public Overridable Property Id As Integer
    Public Overridable Property Name As String
End Class
我的映射如下所示:

Public Class OrderFormMapping
    Inherits ClassMap(Of OrderForm)

    Public Sub New()
        Table("Forms_OrderForm")
        Id(Function(x) x.Id).GeneratedBy.HiLo("hibernate_unique_key", "Forms_OrderForm", 1000)

        HasMany(Function(x) x.Sections).KeyColumn("OrderFormId").Access.CamelCaseField(Prefix.Underscore).Cascade.AllDeleteOrphan()
    End Sub
End Class

Public Class OrderSectionMapping
    Inherits ClassMap(Of OrderSection)

    Public Sub New()
        Table("Forms_OrderForm_Sections")
        Id(Function(x) x.Id).GeneratedBy.HiLo("hibernate_unique_key", "Forms_OrderForm_Sections", 1000)

        Map(Function(x) x.Name)
    End Sub
End Class
Forms_OrderForm_部分中的外键允许为null,因为我知道NHibernate喜欢创建行,然后稍后设置外键

问题是,我有另一个项目,据我所知,它使用相同的集合定义和映射,并且工作得很好。该项目使用SQL的ID标识功能,我认为它使用的是FluentNHibernate的早期版本


上述类和映射使用NHibernate 3.1和FluentNHibernate 1.2。任何帮助都将不胜感激

检查实际数据库中是否存在外键,我在使用EF时遇到了相同的问题,这就是为什么,可能会有所帮助。

该问题是由我正在使用的预插入/预更新事件侦听器引起的。我没有考虑它,因为我在另一个项目中使用了它,效果很好,但是我在这个项目中对事件侦听器所做的一个更改是,我在主会话中进行了另一次选择,这似乎会干扰更新。我改变了选择使用辅助会话,现在一切正常


谢谢你的建议。

的确如此;最初,我忘记在外键列中允许空值,当NHibernate尝试向其中插入空值时出现SQL错误,因为NHibernate没有在列中插入任何值。您如何创建此实体并将其添加到其集合?发布这样做的代码可能会有所帮助。我只是更新它们,使用标准的collection add方法添加到集合中,然后在NHibernate会话上调用addrootEntity。但是看起来我发现了问题。。。似乎有一个事件侦听器导致保存出现问题。。。当我删除它们时,外键会像我预期的那样得到更新。如果它解决了您的问题,您应该发布答案并接受它。