我在这里很难过......我已经得到了我认为是一个非常简单的集合,我正在使用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。任何帮助将不胜感激!
答案 0 :(得分:0)
检查实际数据库中是否存在外键,我使用EF时遇到了同样的问题,这就是原因,可能有所帮助。
答案 1 :(得分:0)
问题是由我正在使用的PreInsert / PreUpdate事件侦听器引起的。我没有想到它,因为我在另一个工作正常的项目中使用它,但我在这个项目中对事件监听器做的一个改变是我在主会话上做了另一个选择,这似乎干扰了更新。我改变了选择使用辅助会话,现在一切正常。
感谢所有建议。