我遇到了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
答案 0 :(得分:0)
据我所知,CompositeIds总是被分配给你。可能有数据库生成的ID或属性,但不是复合ID的一部分。
使用GuidComb或HighLow作为IdGenerator。
如果用户名是appwide但没有更改,则编写一个自定义IdGenerator,它在初始化时获取用户名作为参数,并附加数据库生成的值。例如,使用TablebasedIdGenerator,它使用表来保存上次使用的id(每个用户名)。