2012-05-30 71 views
0

我試圖在http://codeinsanity.com通過引導線NCommon和NH到多個數據庫(見「配置NCommon多數據庫支持」),並通過流暢的方法工作的建議,如下:NCommon +流利的NHibernate +多數據庫?

var configuration = NCommon.Configure.Using(adapter).ConfigureState<DefaultStateConfiguration>(); 

    configuration.ConfigureData<NHConfiguration>(config => config.WithSessionFactory(() => _sessionFactories[0]).WithSessionFactory(() => _sessionFactories[1])); 

該作品不出所料,但你可以看到sessionFactories是硬編碼的。我真正想要做的是這樣的:

 foreach(ISessionFactory sessionFactory in _sessionFactories) 
    { 
      configuration.ConfigureData<NHConfiguration>(config => config.WithSessionFactory(() => sessionFactory)); 
    } 

但是,這將引發以下異常:

組件NCommon.Data.NHibernate.NHUnitOfWorkFactory無法註冊。已經有一個名稱的組件。你想修改現有的組件嗎?如果不是,請確保指定一個唯一的名稱。

我希望有一個正確的方法來連接n-SessionFactories而不用硬編碼它們 - 但我只是沒有看到解決方案。有什麼建議?

回答

0

我想我得到這個由SessionFactory的一塊委託給一個方法來工作,如下圖所示:

configuration.ConfigureData<NHConfiguration>(config => ConfigureSessionFactories(config)); 

    private void ConfigureSessionFactories(NHConfiguration configuration) 
    { 
     foreach (ISessionFactory sessionFactory in _sessionFactories) 
     { 
      configuration.WithSessionFactory(() => sessionFactory); 
     } 
    } 

然而,只有似乎是一個解決方案。假設你有多個會話工廠,你可以使用它們全部進行查詢,但只有最後添加的會話工廠才能訪問數據庫並返回結果。針對其他會話工廠的查詢將永遠不會觸及實際的數據庫,並返回零個實體。

我已經能夠得到這個工作的唯一方法是:

configuration.ConfigureData<NHConfiguration>(config => config.WithSessionFactory(() => _sessionFactories[0]).WithSessionFactory(() => _sessionFactories[1])); 

我寧願不硬編碼,但..我寧願迭代的正循環會話工廠......有沒有人有如何完成這個想法?