停止Fluent nHibernate插入复合键值

时间:2015-01-28 15:47:50

标签: vb.net nhibernate fluent-nhibernate db2-400

我遇到了iSeries AS400系统的Fluent映射问题。为了使用DDS保留文件,我们避免使用自动增量,但我可以使用时间戳和用户名作为复合键。我的问题是时间戳是"始终生成"并且程序正在尝试插入NULL。有没有一种方法可以将时间戳作为我的复合键的一部分使用,但是这样做是为了使它永远不会成为我的插入语句的一部分?

自从我玩游戏以来,我在时间戳中留下了时间戳,但它没有任何额外用途,如图所示。

Public Class InterLog

    Public Overridable Property Username As String
    Public Overridable Property Url As String
    Public Overridable ReadOnly Property Timestamp As Date
        Get
            Return _timestamp
        End Get
    End Property

    Protected Friend Overridable Property _timestamp As Date

    Public Overloads Overrides Function Equals(obj As Object) As Boolean
        Return MyBase.Equals(obj)
    End Function

    Public Overrides Function GetHashCode() As Integer
        Return MyBase.GetHashCode()
    End Function
End Class

Friend Class InterLogMap
    Inherits ClassMap(Of InterLog)

    Public Sub New()
        Table("INTERLOG")
        CompositeId _
            .KeyProperty(Function(x) x.Username, "USERNAME") _
            .KeyProperty(Function(x) x._timestamp, Sub(_set)
                                                       _set.ColumnName("XASTAMP")
                                                   End Sub)

        Map(Function(x) x.Url, "URL")
    End Sub
End Class

1 个答案:

答案 0 :(得分:0)

据我所知,CompositeIds总是被分配给你。可能有数据库生成的ID或属性,但不是复合ID的一部分。

使用GuidComb或HighLow作为IdGenerator。

如果用户名是appwide但没有更改,则编写一个自定义IdGenerator,它在初始化时获取用户名作为参数,并附加数据库生成的值。例如,使用TablebasedIdGenerator,它使用表来保存上次使用的id(每个用户名)。