2009-09-25 5 views
1

À la suite de yesterday's discussion, j'ai décidé d'utiliser Castle ActiveRecord pour ma tâche ORM. J'ai ajouté des attributs à la classe selon le starting guide. Après avoir corrigé quelques erreurs évidentes, j'ai été accueilli avec ceci:Problème de cartographie Castle ActiveRecord

configuration Impossible de trouver pour CLASS_XXX ou son type de racine Castle.ActiveRecord.ActiveRecordBase cela est généralement une indication que la configuration n'a pas été correctement configuré

Lorsque CLASS_XXX dans le message d'erreur est l'un de mon nom de classe C#. Ce qui est intéressant, c'est que CLASS_XXX est différent chaque fois que je lance le code. J'ai activé log4net et mon fichier log.txt n'a rien capturé. Donc, je devine que l'erreur s'est produite avant que le processus atteigne NHibernate.

Après mon code CSharp

 log4net.Config.XmlConfigurator.Configure(); 

     InPlaceConfigurationSource source = 
       new InPlaceConfigurationSource(); 


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

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

Toute suggestion pour trouver la véritable cause de ce problème?

Répondre

1

Soit vous manquez la configuration pour le InPlaceConfigurationSource (sample) ou vous devez utiliser un different initialization method.

+0

Le lien que vous avez fourni " échantillon "était en fait incorrect. Il pointe vers le "InvalidRootTypeTestCase", qui est censé lancer Exception. Cependant, ce lien me donne un excellent point de départ - Tests pour la source. C'est la première fois que j'utilise des tests comme documentation principale. J'ai téléchargé toutes les sources et lu les tests, et il s'est avéré que c'était en effet un problème d'initialisation. Tout ce dont j'ai besoin est une simple source var = ConfigurationManager.GetSection ("activerecord") comme IConfigurationSource; Et les choses ont commencé à se réunir. Merci pour la direction. –

+0

le lien n'est pas incorrect ... il montre comment configurer par programme une InPlaceConfigurationSource –

1

Il est peu probable correcte:

InPlaceConfigurationSource source = new InPlaceConfigurationSource(); 

Vous devez soit faire quelque chose comme ceci:

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

Ou quelque chose comme ceci:

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

Votre point est exact. C'est l'initialisation pour la source qui a causé les problèmes. Cependant, depuis que le lien de Mauricio Scheffer m'a emmené au bon endroit pour trouver le problème. Je devais marquer son conseil comme réponse. Merci pour votre aide, cependant. –

Questions connexes