如何在不同的机器上连接不同的数据库'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的这篇文章,但是没有成功:
配置会话工厂提供程序
欢迎任何帮助。
最诚挚的问候,古斯塔沃。
您需要的是每个数据库一个SessionFactory。如果你有两个正在使用的数据库,那就是2个SessionFactories,每个数据库一个。uNHAddins中的所有抽象实际上都归结为创建和管理这些SessionFactories。
假设您正在使用两个数据库—Database1
和Database2
。Database1
有一个表——C_SM_SEND
。Database2
有另一个表——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映射Database1
和Database2
。这就只剩下打开正确的会话和读写你的实体了。
事务操作可以跨两个数据库执行:
using (var tx = new TransactionScope())
{
//session1.Save(obj1);
//session2.Save(obj2);
tx.Complete();
}