很抱歉,如果这看起来有点疯狂,但我已经搞乱了NHibernate一段时间,而且已经遇到了NHibernate可能无法解决的问题......
我有一个包含大量静态数据的数据库,想象它就像一个巨大的产品查找数据库,只是指出这是一个示例场景,我的实际情况有点复杂但与此相似的原理...它托管在一个完全不同的盒子上,所以我不能做“database2.table1.somecolumn”,如果2个DB在同一个盒子和服务器上,我注意到这可能是解决问题的方法。
无论如何,我还有另一个包含与用户相关的数据的数据库,因此想象一下用户从通用网站A购买了大量的东西,你有一个与他们购买的东西有关的ID列表以及他们有多少购买了以及其他一些信息,但与产品相关的实际数据存储在其他数据库中......
因此,如果您想要将此数据合并到包含来自第一个数据库的所有信息的PreviousPurchasedProduct模型以及来自第二个数据库的其他数据,则必须执行类似于此的查询:(如果它们都是在一个盒子上)
SELECT db1.products。,db2.purchases。 来自db2.purchases INNER JOIN db1.products ON db2.purchases.product_id = db1.products.id WHERE db2.purchases.user_id = XXX;
现在首先可以映射这类东西,即使它们位于单独的数据库主机中,我猜不是,如果是这样,你可以通过子类实现这种灵活性。因此,拥有一个纯粹使用db1的产品类和一个派生类,该类可以获取仅适用于db2的购买信息。
也可以从INSERT / UPDATE / DELETE语句中限制数据的db1部分,我非常确定你可以在默认映射中,但因为这将超出每个类的范围我不知道我有什么灵活性。 ..
感谢您阅读我的华夫饼干:D
答案 0 :(得分:1)
我建议你先了解如何在没有NHibernate的情况下解决这个问题。一旦你有一个或多个没有NHibernate的干净解决方案,请回过头来更新你的问题,说“我如何在NHibernate中代表这个SQL?”。
跨数据库查询可以快速实现数据库供应商特定的怪癖,您永远不会提到您正在处理的数据库供应商。如果两个数据库都是同一个供应商,您可以使用数据库供应商特定技术以某种方式链接数据库(但链接不一定是一个好的解决方案,因此您也希望尝试发现备选方案。)