2009-09-25 91 views
1

由於yesterday's discussion的結果,我決定爲我的ORM任務使用Castle ActiveRecord。我已根據starting guide爲班級添加了屬性。固定一些明顯的錯誤後,我迎接這樣的:Castle ActiveRecord映射問題

爲CLASS_XXX或它的根類型找不到配置Castle.ActiveRecord.ActiveRecordBase這通常表示該配置尚未安裝正確

錯誤消息中的CLASS_XXX是我的c#類名之一。有趣的是,每次運行代碼時,CLASS_XXX都是不同的。我已經打開log4net和我的log.txt沒有捕獲任何東西。所以,我猜測在進程到達NHibernate之前發生的錯誤。

以下是我CSHARP代碼

 log4net.Config.XmlConfigurator.Configure(); 

     InPlaceConfigurationSource source = 
       new InPlaceConfigurationSource(); 


     Assembly asm = Assembly.Load("DomainModel.Entities"); 

     ActiveRecordStarter.Initialize(asm,source); 
     ActiveRecordStarter.CreateSchema(); 

找到這個問題的真正原因什麼建議嗎?

回答

1

您可能錯過了InPlaceConfigurationSourcesample)的配置,或者您需要使用different initialization method

+0

您提供的鏈接「樣本「實際上是不正確的。它指向「InvalidRootTypeTestCase」,它應該拋出異常。但是,這個鏈接給了我一個很好的起點 - 測試源代碼。這是我第一次使用測試作爲主要文檔。我下載了所有的源代碼並讀取了測試結果,結果確實是一個初始化問題。我需要的只是一個簡單的var source = ConfigurationManager.GetSection(「activerecord」)作爲IConfigurationSource;事情開始在一起。感謝指導。 – 2009-09-27 12:46:51

+0

鏈接不正確...它顯示如何以編程方式配置InPlaceConfigurationSource – 2009-09-27 14:48:12

1

這是不太可能正確:

InPlaceConfigurationSource source = new InPlaceConfigurationSource(); 

您需要可以做這樣的事情:

string connectionString = 
    System.Configuration.ConfigurationManager. 
    ConnectionStrings["Northwind"].ToString(); 
InPlaceConfigurationSource source = 
    InPlaceConfigurationSource.Build(
    DatabaseType.MSSQLServer2005, connectionString 
); 

或者是這樣的:

string connectionString = 
    System.Configuration.ConfigurationManager. 
     ConnectionStrings["Northwind"].ToString(); 
IDictionary<string, string> properties = 
    new System.Collections.Generic.Dictionary<string, string>(); 
properties.Add("dialect", "NHibernate.Dialect.MsSql2005Dialect"); 
properties.Add("connection.driver_class", "NHibernate.Driver.SqlClientDriver"); 
properties.Add("connection.provider", 
    "NHibernate.Connection.DriverConnectionProvider"); 
properties.Add("connection.connection_string", connectionString); 
properties.Add("proxyfactory.factory_class", 
    "NHibernate.ByteCode.Castle.ProxyFactoryFactory, NHibernate.ByteCode.Castle"); 

InPlaceConfigurationSource source = new InPlaceConfigurationSource(); 
source.Add(typeof(ActiveRecordBase), (IDictionary<string, string>)properties); 
+0

您的觀點是正確的。這是導致問題的源的初始化。然而,由於這是Mauricio Scheffer的鏈接,因此我找到了找到問題的正確位置。我不得不將他的建議標記爲答案。不過,感謝您的大力幫助。 – 2009-09-27 12:49:15