【问题标题】:Update Version field if update row with one sequence per table如果更新行,每个表有一个序列,则更新版本字段
【发布时间】:2011-11-15 04:31:23
【问题描述】:

我有一个带有“版本”字段的表,每个表必须具有唯一值(可能是序列)。行更新时必须更新版本值。

我正在使用 Fluent NHibernate 和 SQLite。

请注意,版本字段是整数类型。当我对版本使用日期时间类型时,一切都很好,因为它在每个表中都是唯一的。 当使用 int 类型时,它是每行唯一的。

this.Version(x => x.Version).Column("Version");

【问题讨论】:

  • 为什么实体(行)的版本对所有实体都应该是唯一的?如果创建了两个新实体,它们的版本都是 1。如果修改了一个实体,它的版本会增加 1。这就是版本在 NHibernate 中的工作方式。你需要那个专栏做什么?
  • 通过“select * from Entities where Version > 5”之类的查询检索所有更新的实体,在版本 5 之后插入。
  • 其实我的Version栏就像某种Revision

标签: .net nhibernate sqlite fluent-nhibernate


【解决方案1】:

如果您不将版本列用作 NHibernate 定义的“版本”,则应将其映射为属性并为 NHibernate 版本控制使用不同的列。

您可以创建一个触发器,用插入时的序列值填充您的列,并将其映射如下:

Map(x => x.Version).Column("Version")
   .Generated.Insert()
   .Not.Insert()
   .Not.Update();

【讨论】:

    【解决方案2】:

    我认为,如果您的 Version 变为 LastModified DateTime 您的 Revision 方法会更加清晰,而且很明显版本在整个表格中并不是那么独特。

    如果您无权访问序列,则在 db 中获取 DateTime.UtcDate 或调用相同的函数可能比在 db 中处理自动增量唯一函数更容易。

    如果这符合您的需求,我认为它比我也喜欢的触发版本更易于编程。也就是说,我认为我们也不能使用 FluentNHibernate 映射此类行为..

    【讨论】:

    • 我认为使用 DateTime 进行修订是不合适的,因为我们无法确定 DateTime 值的时间顺序(我们有时间同步等)
    • 啊我明白了,那它确实不能满足您的需求。
    猜你喜欢
    • 1970-01-01
    • 2020-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-05
    • 1970-01-01
    • 1970-01-01
    • 2022-11-23
    相关资源
    最近更新 更多