我维护一个应用程序,该应用程序具有许多从多个数据库中提取数据的域实体。这通常的工作方式是实体从数据库 A 加载(其中存储了它们的大部分字段)。当调用与数据库 B 中的数据对应的属性时,实体向数据库 B 触发 SQL 以获取所有相关数据。
我目前正在使用“自己动手”的 ORM,它虽然丑陋,但有效(且易于理解)。我最近开始将 NHibernate 用于仅从数据库 A 中提取的实体,但我想知道如何将 NHibernate 用于从数据库 A 和 B 中提取的实体。
我能想到的最好的方法如下。我继续为数据库 A 中的实体使用基于 NHibernate 的类库。那些也需要来自数据库 B 的数据的实体在通过属性访问的单个类中公开来自数据库 B 的所有数据。调用此属性时,它会调用适当的存储库,并返回对象。因此,访问数据库 B 的类库需要从访问数据库 A 的类库中引用。
这有什么意义吗?对于这种情况是否有更成熟的模式(这一定很常见)。
谢谢
大卫
最佳答案
我不知道它与你的情况的对应程度如何,也不知道 NHibernate 移植在这一点上有多成熟,但你可能想看看 Shards .
如果它不能按原样为您工作,它至少可以提供一些有趣的模式供您考虑。
编辑(基于评论):
这似乎确实不符合您的情况,因为 Shards 是关于数据的水平拆分。
如果您需要垂直拆分,您可能需要定义多个持久化单元。涉及两个数据库的查询和事务可能会变得有趣。恐怕我真的帮不上什么忙。这question不过肯定是相关的。
关于database - 包含来自多个数据库的数据的域实体的推荐模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3388815/