2010-09-22 74 views
2

場景:我有一個應用程序從SQL數據庫以及Oracle數據庫中提取數據。我有NHibernate實現的SQL端和同事已經有一個Oracle方面的工作實現(同一對象不同的項目)。我目前在定義一個App.Config中連接字符串和調用這個函數中的Program.cs城堡活動記錄多個數據庫連接(Oracle和SQL)

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計數。

問題:如何實現多個連接?

+0

我在我的'待辦事項列表'上有這個隊列 - http://thatstoday.com/a/68835 – rebelliard 2010-09-22 19:53:20

+0

你想做什麼?我沒有看到任何問題。 – 2010-09-22 21:30:35

+0

對不起,我還是不明白這個問題。你想從幾個數據庫中獲取特定的實體,然後連接結果嗎?或者從一個數據庫獲取一些實體,從另一個數據庫獲取其他實體?或者根據上下文(即多租戶)從一個數據庫或另一個數據庫獲取實體? – 2010-09-23 22:15:11

回答

4

對於遇到此問題的未來用戶。
本文幫助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> 

然後在Program.cs中應用之前.Run我有

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

where type s是類型爲[]的列表(函數需要數組)。該列表需要包含將與Nhibernate一起使用的每個類。在我的情況下,它包含SQL和Oracle類。除了這個類是由我的所有SQL類

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

} 

繼承要生成自己的SQL類我用了一臺發電機,這讓他們都序列化這不得不採取關閉。另外請注意,您不能擁有同名的班級,否則會出現錯誤。