Database 包含多个数据库数据的域实体的推荐模式

Database 包含多个数据库数据的域实体的推荐模式,database,nhibernate,design-patterns,Database,Nhibernate,Design Patterns,我维护一个应用程序,它有许多域实体,可以从多个数据库中提取数据。这通常的工作方式是从数据库A(其中存储了实体的大部分字段)加载实体。当调用与数据库B中的数据对应的属性时,实体向数据库B发出SQL以获取所有相关数据 我目前正在使用一个“自己滚”的ORM,它很难看,但很有效(而且很容易理解)。我最近开始对仅从数据库A绘制的实体使用NHibernate,但我想知道如何对从数据库A和B绘制的实体使用NHibernate 我能想到的最好的方法如下。我继续为数据库a中的实体使用基于NHibernate的类库

我维护一个应用程序,它有许多域实体,可以从多个数据库中提取数据。这通常的工作方式是从数据库A(其中存储了实体的大部分字段)加载实体。当调用与数据库B中的数据对应的属性时,实体向数据库B发出SQL以获取所有相关数据

我目前正在使用一个“自己滚”的ORM,它很难看,但很有效(而且很容易理解)。我最近开始对仅从数据库A绘制的实体使用NHibernate,但我想知道如何对从数据库A和B绘制的实体使用NHibernate

我能想到的最好的方法如下。我继续为数据库a中的实体使用基于NHibernate的类库。那些还需要数据库B中的数据的实体在通过属性访问的单个类中公开数据库B中的所有数据。调用此属性时,它将调用相应的存储库,并返回对象。因此,访问数据库B的类库需要从访问数据库A的类库中引用

这有什么意义吗?对于这种情况,是否有一种更为成熟的模式(必须是相当普遍的)

谢谢


David

我不知道它与您的情况有多匹配,也不知道NHibernate在这一点上的移植有多成熟,但您可能需要研究一下

<>如果它对你不起作用,它至少可以提供一些有趣的模式来考虑。

编辑(基于评论):

这似乎并不符合您的情况,因为碎片是关于数据的水平分割


如果需要垂直拆分,可能需要定义多个持久性单元。涉及这两个数据库的查询和事务可能会变得有趣。恐怕我帮不了什么忙。不过,这肯定是相关的。

我不知道它与您的情况有多匹配,也不知道NHibernate的移植在这一点上有多成熟,但您可能需要研究一下

<>如果它对你不起作用,它至少可以提供一些有趣的模式来考虑。

编辑(基于评论):

这似乎并不符合您的情况,因为碎片是关于数据的水平分割


如果需要垂直拆分,可能需要定义多个持久性单元。涉及这两个数据库的查询和事务可能会变得有趣。恐怕我帮不了什么忙。但这肯定是相关的。

我会更改数据库模式并创建一个数据库。这不是我的奢侈。其中一个数据库位于一个使用非常频繁的桌面应用程序下面,这个应用程序是由外部创建的。我会更改数据库模式并创建一个数据库。这不是我的奢侈。其中一个数据库位于一个使用非常广泛的桌面应用程序中,它是在外部创建的。谢谢你的提示,我一定会考虑它。看起来类似于将逻辑上等价的行存储到不同的表中。例如,姓氏以A-M开头的人进入一张桌子,其他人进入第二张桌子。在我的例子中,我谈论的是从具有完全不同模式的数据库中提取信息,但将其作为一件事呈现给用户。除非我误解了,否则我不认为碎片可以帮助这个。谢谢你的提示,我一定会考虑它。看起来像是把逻辑上等价的行存储到不同的表中。例如,姓氏以A-M开头的人进入一张桌子,其他人进入第二张桌子。在我的例子中,我谈论的是从具有完全不同模式的数据库中提取信息,但将其作为一件事呈现给用户。除非我误解了,否则我不认为碎片能帮上忙。