【发布时间】:2010-12-14 09:16:04
【问题描述】:
我们有一个使用 NHibernate 的相当强大的系统,我们正在从单个数据库服务器迁移到拥有两台服务器,一台用于管理,另一台用于我们面向公众的网站。这主要是为了让我们可以使用不会影响当前站点的工作流来进行内容管理之类的事情。截至今天,它们是同一服务器中的两个数据库,但随着时间的推移,我可以看到使用两台物理机通过 Web 服务调用来推送数据。
例如,我们的一位营销人员决定通过管理员推出一项新促销活动,并将其安排在 2 周后。我们正在开发一个调度系统,该系统将在新促销活动开始时将其推送到我们的生产服务器。目的是为数据推送使用相同的 NHibernate 提供程序,但我们需要保持引用完整性。
我们正在使用 fluent nhibernate,我可以看到编写两个不同的类映射,然后使用某种形式的依赖注入(IE 结构映射)来选择要加载的映射。我希望有一个更好的答案,因为随着系统的增长,这似乎无法维持。有什么建议吗?
【问题讨论】:
-
您的问题到底是什么?您想在两台服务器上使用相同的 ID?
-
没错。我已经针对 ISession 上的各种方法编写了测试 - Replicate、Merge、SaveOrUpdate、SaveOrUpdateCopy。所有这些都会抛出错误生成新 ID 而不是使用当前 ID。我看到方法 CurrentSession().Replicate(entity,ReplicationMode.Overwrite); - 它看起来最有希望。这可能是一个错误吗?
-
你使用的是db生成的id吗?
-
是的,我们有运行 NHibernate 代码的负载平衡服务器,并且是当时在数据库中生成它的唯一合乎逻辑的地方。我愿意接受建议,但是如果在应用服务器之间不同步,在代码中自定义 ID 生成器的想法会引发数据损坏的问题。
标签: nhibernate fluent-nhibernate identity-insert