FluentNHibernate HasMany не сохраняет внешний ключ - PullRequest
0 голосов
/ 26 апреля 2011

Я довольно озадачен здесь ... У меня есть то, что я считаю действительно простой коллекцией, которую я отображаю с помощью функции HasMany FluentNHibernate, и хотя все явно заданные свойства детей сохраняются, значение внешнего ключа равноне.Вот мои классы и сопоставления (с удалением посторонних данных):

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 голосов
/ 27 апреля 2011

Проблема была вызвана прослушивателем событий PreInsert / PreUpdate, который я использовал.Я не думал об этом, потому что использовал его в другом проекте, который работал нормально, но одно изменение, которое я сделал для прослушивателя событий в этом проекте, заключается в том, что я сделал еще один выбор в основном сеансе, который, казалось, мешалобновления.Я изменил этот выбор, чтобы использовать дополнительный сеанс, и теперь все работает нормально.

Спасибо за все предложения.

0 голосов
/ 26 апреля 2011

Убедитесь, что внешний ключ существует в фактической базе данных, у меня была та же проблема с EF, и именно поэтому, может помочь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...