0

我正在尝试在不同的机器上连接 nHibernate 和 Unhaddins,每个机器在 Oracle 中都有一个数据库。他们有不同的表和不同的数据库。

我需要阅读一张表格,我们将其称为C_SM_SEND.

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

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

现在重要的是:我必须在一台机器的一个数据库中读取一个表=>“MACHINE1/ORCL”,读取一个名为“C_SM_SEND”的表,然后在另一台机器的另一个数据库的另一个表中插入值=>“ MACHINE2/SERV”,写入名为 PC_TO_SM_PRIM_DATA 的表。

另外,请记住:每个表的映射是不同的!

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

我的应用程序是根据标准 MVVM、IoC 制作的,并且还使用存储库。

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

配置会话工厂提供程序

欢迎任何帮助。

此致,

古斯塔沃。

4

1 回答 1

0

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

假设您正在使用 2 个数据库 -Database1Database2. Database1有那一张桌子 - C_SM_SENDDatabase2有另一张桌子 - PC_TO_SM_PRIM_DATA。构建代码的一种非常简单的方法是使用 2 个构建 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();
    }
}

您可以映射Database1Database2使用您的 IoC。剩下的只是打开正确的会话并读取/写入您的实体。

可以通过以下方式跨两个数据库执行事务操作:

using (var tx = new TransactionScope())
{
    //session1.Save(obj1);
    //session2.Save(obj2);
    tx.Complete();
}
于 2012-12-27T02:55:55.360 回答