如何在不同的机器上连接不同的数据库's,使用hibernate和unhaddin

本文关键字:使用 hibernate unhaddin 数据库 机器 连接 | 更新日期: 2023-09-27 17:49:29

我试图在不同的机器上连接nHibernate和Unhaddins,每个都有Oracle数据库。它们有不同的表和不同的数据库。

我需要读取一个表,我们称它为C_SM_SEND

在这个表中,我有一个名为Body的列,它将包含一个XML。

另一个进程将读取此表,获取此XML并将其值插入到另一个表中,我们将其命名为PC_TO_SM_PRIM_DATA。我们不要担心列或Table的名称。

现在的问题是:我必须在一台机器=> "MACHINE1/ORCL"的一个DB中读取一个表,读取一个名为"C_SM_SEND"的表,并在另一台机器=> "MACHINE2/SERV"的另一个DB的另一个表中插入值,写一个名为PC_TO_SM_PRIM_DATA的表。

还要记住:每个表的映射是不同的!

我读过一些文章,解释NHibernate如何连接到不同的机器,使用unhaddin,没有一个我读过的工作。

我的应用程序正在使用标准MVVM, IoC,并且还使用存储库。

我也读了Fabio Maulo的这篇文章,但是没有成功:

配置会话工厂提供程序

欢迎任何帮助。

最诚挚的问候,古斯塔沃。

如何在不同的机器上连接不同的数据库's,使用hibernate和unhaddin

您需要的是每个数据库一个SessionFactory。如果你有两个正在使用的数据库,那就是2个SessionFactories,每个数据库一个。uNHAddins中的所有抽象实际上都归结为创建和管理这些SessionFactories。

假设您正在使用两个数据库—Database1Database2Database1有一个表——C_SM_SENDDatabase2有另一个表——PC_TO_SM_PRIM_DATA。构建代码的一个非常简单的方法是有两个类来构建SessionFactories:

public class Database1
{
    private ISessionFactory _sessionFactory;
    public Database1SessionFactory()
    {
        //Build your session factory for Database1 here
        //with the entity C_SM_SEND, connection string to Database1, etc, etc.
    }
    public ISession OpenSession()
    {
        return _sessionFactory.OpenSession();
    }
}
public class Database2
{
    private ISessionFactory _sessionFactory;
    public Database1SessionFactory()
    {
        //Build your session factory for Database2 here
        //with the entity PC_TO_SM_PRIM_DATA, connection string to Database2, etc, etc.
    }
    public ISession OpenSession()
    {
        return _sessionFactory.OpenSession();
    }
}

您可以使用您的IoC映射Database1Database2。这就只剩下打开正确的会话和读写你的实体了。

事务操作可以跨两个数据库执行:

using (var tx = new TransactionScope())
{
    //session1.Save(obj1);
    //session2.Save(obj2);
    tx.Complete();
}