1

请原谅我提出了一个可能有完全明显答案的问题 (RTFM),但是如何使这里提到的“版本属性”真正起作用?此处提供的 Ayende 网站链接和此处的 github 存储库暗示这是可能的。这里还有另一个 SO 链接,它描述了相同的问题,但并没有真正发布明确的解决方案。我也无法在与此功能相关的发行说明或文档中找到 NSB 示例代码或任何内容。但是,对于使用多个工作线程和 ReadCommited 运行 sagas 的任何人来说,这都是至关重要的知识。

是否真的像将一个名为 Version 的整数属性添加到您的 saga 数据类和一个时间戳/行版本到您的 saga 数据表一样简单?这真的在某个地方的样本中,我只是没有找对地方吗?

此外,根据我看到的评论,NSB 3.x 中似乎存在一个涉及此功能的错误。我是否需要升级到 4.x 才能获得此功能,或者是否有一种简单的方法可以让它在 3.x 中工作?

谢谢!

编辑:

使用下面约翰西蒙的回答,我最初使用以下 NSB 版本遇到了一个错误:

NHibernate: 3.3.3.4001
NServiceBus: 4.3.1
NServiceBus.Host: 4.3.1
NServiceBus.Interfaces: 4.3.3
NServiceBus.NHibernate: 4.3.0
NServiceBus.StructureMap: 4.3.1

在 github 上打开了这个问题,经过一番来回后,尝试了一个包含修复的开发版本并让它工作。官方修复在 NServiceBus.NHibernate v4.4.0 中发布。

我对答案的变体是将其与时间戳 SQL 列一起使用:

[RowVersion]
public virtual byte[] Version { get; set; }

经过几天的锤击,它看起来不错。

4

1 回答 1

3

在 v3 中,您需要做的就是在 saga 上定义一个版本属性:

public virtual int Version {get;set;}

在 v4 中,我们默认使用“optimistic-all”并发模型,如果您需要自定义行级并发,您可以执行与 v3 + 属性相同的操作:

[RowVersion]
public virtual int Version { get; set; }
于 2013-12-26T22:35:13.017 回答