FluentNHibernate HasMany不会持久保存外键

时间:2011-04-25 20:47:31

标签: .net nhibernate fluent-nhibernate

我在这里很难过......我已经得到了我认为是一个非常简单的集合,我正在使用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_Sections中的外键允许空值,因为我知道NHibernate喜欢创建行然后稍后设置外键。

问题是,我有另一个项目,从我所知道的,使用相同的集合定义和映射,它工作得很好。该项目使用SQL的身份识别功能,我认为使用的是以前版本的FluentNHibernate。

上面的类和映射使用的是NHibernate 3.1和FluentNHibernate 1.2。任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

问题是由我正在使用的PreInsert / PreUpdate事件侦听器引起的。我没有想到它,因为我在另一个工作正常的项目中使用它,但我在这个项目中对事件监听器做的一个改变是我在主会话上做了另一个选择,这似乎干扰了更新。我改变了选择使用辅助会话,现在一切正常。

感谢所有建议。