Я довольно озадачен здесь ... У меня есть то, что я считаю действительно простой коллекцией, которую я отображаю с помощью функции 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.Любая помощь будет принята с благодарностью!