NserviceBus - 从 SagaData 实体中删除属性

NserviceBus - Removing properties from SagaData entities

我有一个 SagaData class,它有很多多余的属性,我想在下一个版本中删除这些属性。然而,目前生产环境中有正在进行的 Sagas 活动,我不确定在 SagaData class 上删除这些属性会对已经存在的 Sagas 产生什么影响。

Afaik NServiceBus 负责为我们创建数据库表,其中一个表将所有这些冗余属性作为列。谁能指出我学习如果从 SagaData class 中删除这些属性会发生什么的方向。假设这些属性未被使用,仅被填充并且代码将被相应地重构。 - 我想知道我们的数据库会发生什么,现有的 Sagas 会发生什么

谢谢

我认为您的数据库不会有任何问题。您必须通过迁移删除冗余列。 NServiceBus 不会为你做那件事。

您可以将新版本的端点部署到生产环境中,让 old/existing sagas 随着时间的推移完成,然后停用旧端点并删除不必要的列。

查看 here 详细解释 saga 迁移的示例。

NHibernate 架构更新

NHibernate 仅添加模式,并且仅当 NH 模式生成器是 运行 通过 NServiceBus NHibernate 安装程序 (.EnableInstallers()) 时。 NHibernate 不执行模式迁移,如列类型更改、列重命名和列删除。这是 NHibernate 的限制,而不是 NServiceBus 的限制。

编写脚本SQL

中断架构更改都需要手动编写脚本。您可以使用工具 运行 您手动创建的脚本 RoundhousE 或许多其他类似工具。您还可以使用 Microsoft 数据库部署项目 (SSDT) 等工具来区分数据库,它可以为您创建这些脚本。

删除列

如果你有一个新的 saga,你可以像@hadi 提到的那样等到所有旧的 sagas 完成,你甚至可以在未使用时删除旧的 table。

修改现有的 saga

如果您修改现有的 saga,这意味着您的实现将不再使用这些列,对于现有的 saga 实例也是如此。部署新版本后,您可以安全地从 table(s) 中删除这些列。