【发布时间】:2010-09-20 05:44:20
【问题描述】:
我有一个桌面(winforms)应用程序,它使用 Firebird 数据库作为数据存储(在嵌入式模式下),并且我使用 NHibernate for ORM。我们需要支持的功能之一是能够从外部文件导入/导出数据组。目前,这个外部文件也是一个与主数据库具有相同架构的数据库。
我已经设置了 NHibernate 来查看多个数据库,并且我可以同时使用两个数据库。然而,问题在于在两个数据库之间复制数据。我有两种复制策略:(1) 复制对象的所有相同 ID [aka import/export] 和 (2) 复制大部分新 ID [aka duplicate / copy]。我说“大部分是新的”,因为有些查找项将始终使用相同的 ID 进行复制。
使用新 ID 复制所有内容很好,因为我将只有一个“CopyForExport”方法,该方法可以创建所有内容的副本而不分配新 ID(或清除对象树中的所有 ID)。
处理这种情况以及在数据库之间复制数据同时保持相同 ID 的“最佳实践”方法是什么?
澄清:我不想同步两个数据库,只是导出一个子集(用户可选择)或数据以传输给其他人(然后他们会将数据子集导入到他们自己的数据库中)。
进一步澄清:我认为我已将问题归结为: 我想使用 NHibernate 的 ISession.SaveOrUpdate 功能,因此我使用未“分配”的身份生成器设置我的实体。但是,当我想要覆盖生成的标识时(用于在同一进程中的多个数据库之间复制数据)时遇到问题。
有没有办法使用 Guid.Comb 或 UUID 生成器,但有时可以指定我自己的标识符(用于传输到具有相同架构的不同数据库连接)。
【问题讨论】:
标签: winforms nhibernate