gpt4 book ai didi

c# - CaSTLe Active Record 多数据库连接(Oracle 和 SQL)

转载 作者:行者123 更新时间:2023-11-30 21:19:28 27 4
gpt4 key购买 nike

场景:我有一个从 SQL 数据库和 Oracle 数据库中提取数据的应用程序。我已经为 SQL 端实现了 NHibernate,并且一位同事已经有了 Oracle 端的有效实现(同一对象的不同项目)。我目前正在 App.Config 中定义连接字符串并在 Program.cs 中调用此函数

 var connectionString = System.Configuration.ConfigurationManager.ConnectionStrings["Foo"].ToString();
var configuration = InPlaceConfigurationSource.Build(DatabaseType.MsSqlServer2000, connectionString);
ActiveRecordStarter.Initialize(System.Reflection.Assembly.GetExecutingAssembly(), configuration);

请注意该项目是在 C# .Net 3.5 中

我已阅读有关使用 DifferentDatabaseScope 的信息,但当我尝试查询时,查询不会返回任何结果,也无法在 NHib Profiler 中看到任何内容。没有错误弹出,只有 0 个计数。

问题:如何实现多连接?

最佳答案

对于遇到此问题的 future 用户。
本文帮助http://www.darkside.co.za/archive/2008/01/21/castle-activerecord-connecting-to-multiple-databases.aspx

为了让它工作,我必须将这些代码片段添加到我的 App.config

<activerecord>

<config>
<add key="connection.driver_class"
value="NHibernate.Driver.OracleClientDriver" />
<add key="dialect"
value="NHibernate.Dialect.Oracle10gDialect" />
<add key="connection.provider"
value="NHibernate.Connection.DriverConnectionProvider" />
<add key="connection.connection_string"
value="Data Source =
(DESCRIPTION =
(ADDRESS =
(PROTOCOL = TCP)
(HOST = SERVERNAME)
(PORT = 1521)
)
(ADDRESS =
(PROTOCOL = TCP)
(HOST = SERVERNAME)
(PORT = 1521)
)
(LOAD_BALANCE = yes)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = NAME)
)
);User Id = ID; Password = PASS;" />
</config>

还有这个

    <config type="Sens.SensClass`1, Sens">
<add key="connection.driver_class"
value="NHibernate.Driver.SqlClientDriver" />
<add key="dialect"
value="NHibernate.Dialect.MsSql2000Dialect" />
<add key="connection.provider"
value="NHibernate.Connection.DriverConnectionProvider" />
<add key="connection.connection_string"
value="Data Source=mntcon016\;Initial Catalog=TEST;Trusted_Connection=True;" />
</config>
</activerecord>


<configSections>
<section name="activerecord"
type="Castle.ActiveRecord.Framework.Config.ActiveRecordSectionHandler, Castle.ActiveRecord" />
<section name="hibernate-configuration" type="NHibernate.Cfg.ConfigurationSectionHandler, NHibernate"/>
</configSections>
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
<session-factory>
<property name="proxyfactory.factory_class"> NHibernate.ByteCode.Castle.ProxyFactoryFactory, NHibernate.ByteCode.Castle </property>
</session-factory>
</hibernate-configuration>

然后在 Application.Run 之前的 Program.cs 中

 ActiveRecordStarter.Initialize(
ActiveRecordSectionHandler.Instance, types.ToArray());

其中 types 是 type[] 的列表(函数需要一个数组)。此列表需要包含将与 Nhibernate 一起使用的每个类。在我的例子中,它同时包含 SQL 和 Oracle 类。以及我所有的 SQL 类都继承的这个类

public abstract class TestClass<T> : ActiveRecordBase<T>
{

}

为了生成我的 SQL 类,我使用了一个生成器,它使它们都是可序列化的,但必须将其删除。另请注意,您不能拥有同名的类,否则会出错。

关于c# - CaSTLe Active Record 多数据库连接(Oracle 和 SQL),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3772699/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com