0
votes

I'm pretty stumped here... I've got what I believe to be a really simple collection that I'm mapping using FluentNHibernate's HasMany function and while all the children's explicitly set properties are saving, the foreign key value is not. Here are my classes and mappings (with extraneous data removed):

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

My mapping looks like this:

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

The foreign key in the Forms_OrderForm_Sections allows nulls because I know that NHibernate likes to create the row and then set the foreign key later.

The thing is, I have another project that uses, from what I can tell, the same collection definitions and mapping and it works just fine. That project uses SQL's Identity feature for Ids and I think is using the previous version of FluentNHibernate.

The above classes and mappings are using NHibernate 3.1 and FluentNHibernate 1.2. Any help would be greatly appreciated!

2
How are you creating this entity and adding to it's collection? It may help to post that code that does this. - Cole W
I'm just newing them up, adding to the collection using the standard collection add() method, and then calling add(rootEntity) on the NHibernate session. - Andorbal
But it looks like I found the problem... It looks like there was an event listener that was causing problems with the save... When I removed them, the foreign keys get updated as I would have expected. - Andorbal
You should post the answer and accept it if it fixed your issue. - Cole W

2 Answers

0
votes

Check that the foreign key exists in the actual database, I had the same problem using EF and this was why, might help.

0
votes

The problem was caused by a PreInsert/PreUpdate event listener that I was using. I didn't think about it because I was using it in the other project that worked fine, but the one change I made to the event listener in this project is that I did another select on the main session, which seemed to interfere with the updates. I changed that select to use a secondary session and everything works fine now.

Thanks for all the suggestions.