Vb.net 停止Fluent nHibernate插入复合键值

Vb.net 停止Fluent nHibernate插入复合键值,vb.net,nhibernate,fluent-nhibernate,db2-400,Vb.net,Nhibernate,Fluent Nhibernate,Db2 400,我对iSeries AS400系统的Fluent映射有问题。为了使用DDS保存文件,我们避免使用自动递增,但我可以使用时间戳和用户名作为复合键。我的问题是时间戳总是生成的,程序试图插入一个空值。有没有一种方法可以将时间戳用作复合键的一部分,但使其永远不会成为insert语句的一部分 我在一个动作中留下了扩展的时间戳,因为我在玩,但它没有额外的用途,如图所示 Public Class InterLog Public Overridable Property Username As Str

我对iSeries AS400系统的Fluent映射有问题。为了使用DDS保存文件,我们避免使用自动递增,但我可以使用时间戳和用户名作为复合键。我的问题是时间戳总是生成的,程序试图插入一个空值。有没有一种方法可以将时间戳用作复合键的一部分,但使其永远不会成为insert语句的一部分

我在一个动作中留下了扩展的时间戳,因为我在玩,但它没有额外的用途,如图所示

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

据我记忆所及,复写本总是由你指定的。可以由数据库生成ID或属性,但不能是复合ID的一部分

使用GuidComb或HighLow作为IdGenerator


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

我真的不确定我是否理解。。。但怎么可能成为改变价值的一部分呢?也许我读得不好。。。但这似乎是设计失败。ID,如果是复合的或不是复合的,则应是实心的,不可更改。也许这可能是Mapping的问题,我基本上希望它将时间戳视为自动增量,因为时间戳是由DB自动生成的,所以程序不应该尝试插入值。这能澄清问题吗?