2011-11-05 1 views
0

Je joue avec Castle activeRecord, et j'ai fait avec succès une application asp.net MVC, qui peut générer le schéma, effectuer des opérations crud et interroger la base de données mysql. Je l'ai fait dans MonoDevelop.Impossible d'utiliser l'option activer le château dans l'application de ligne de commande mono?

chose Werid est, si je l'utilise presque exactement le même code dans un projet de ligne de commande, il ne fonctionne pas, jeter l'exception suivante:

Could not create the driver from NHibernate.Driver.MySqlDataDriver

L'exception est levée au pc.Create(); dans la code ci-dessous. Même si je le dis pour générer le schéma, cela n'arrive jamais, mais cela arrive dans l'application web. Une recherche Google de ce message indique que cela se produit lorsque le fichier mysql.data.dll n'est pas dans le chemin ou référencé, etc. Il est référencé, et "Copie locale" est activé pour être copié dans le dossier de débogage . J'ai vérifié qu'il est réellement présent dans le dossier aussi.

J'ai exactement les mêmes références chargées que l'application asp.net mvc. Pourquoi échoue-t-il?

Voici le code de l'application de la ligne de commande:

using System; 
using Castle.ActiveRecord; 
using Castle.ActiveRecord.Framework.Config; 
using ArTestCmd; 

namespace ArTestCmd 
{ 
    class MainClass 
    { 
     public static void Main (string[] args) 
     { 
      String configFile = @"/home/si/Projects/ArTestCmd/CastleAR.config"; 

      XmlConfigurationSource source = new XmlConfigurationSource(configFile); 
      ActiveRecordStarter.Initialize(source, typeof(Pc)); 
      ActiveRecordStarter.UpdateSchema(); 

      Pc pc = new Pc(); 
      pc.name = "blah"; 
      pc.Create(); 

     } 
    } 

    [ActiveRecord] 
    public class Pc : ActiveRecordBase<Pc> 
    { 
     [PrimaryKey] 
     public int PcId { get; set; } 
     [Property (NotNull=true,Unique=true)] 
     public String name { get; set; } 

    } 
} 

Voici la trace de la pile:

Unhandled Exception: NHibernate.HibernateException: Could not create the driver from NHibernate.Driver.MySqlDataDriver. ---> System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.Configuration.ConfigurationErrorsException: Failed to find or load the registered .Net Framework Data Provider 'MySql.Data.MySqlClient'. 
    at System.Data.Common.DbProviderFactories.GetFactory (System.String providerInvariantName) [0x00000] in <filename unknown>:0 
    at NHibernate.Driver.ReflectionBasedDriver..ctor (System.String providerInvariantName, System.String driverAssemblyName, System.String connectionTypeName, System.String commandTypeName) [0x00000] in <filename unknown>:0 
    at NHibernate.Driver.MySqlDataDriver..ctor() [0x00000] in <filename unknown>:0 
    at (wrapper managed-to-native) System.Reflection.MonoCMethod:InternalInvoke (System.Reflection.MonoCMethod,object,object[],System.Exception&) 
    at System.Reflection.MonoCMethod.Invoke (System.Object obj, BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) [0x00000] in <filename unknown>:0 
    --- End of inner exception stack trace --- 
    at System.Reflection.MonoCMethod.Invoke (System.Object obj, BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) [0x00000] in <filename unknown>:0 
    at System.Reflection.MonoCMethod.Invoke (BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) [0x00000] in <filename unknown>:0 
    at System.Reflection.ConstructorInfo.Invoke (System.Object[] parameters) [0x00000] in <filename unknown>:0 
    at System.Activator.CreateInstance (System.Type type, Boolean nonPublic) [0x00000] in <filename unknown>:0 
    at System.Activator.CreateInstance (System.Type type) [0x00000] in <filename unknown>:0 
    at NHibernate.Bytecode.ActivatorObjectsFactory.CreateInstance (System.Type type) [0x00000] in <filename unknown>:0 
    at NHibernate.Connection.ConnectionProvider.ConfigureDriver (IDictionary`2 settings) [0x00000] in <filename unknown>:0 
    --- End of inner exception stack trace --- 
    at NHibernate.Connection.ConnectionProvider.ConfigureDriver (IDictionary`2 settings) [0x00000] in <filename unknown>:0 
    at NHibernate.Connection.ConnectionProvider.Configure (IDictionary`2 settings) [0x00000] in <filename unknown>:0 
    at NHibernate.Connection.ConnectionProviderFactory.NewConnectionProvider (IDictionary`2 settings) [0x00000] in <filename unknown>:0 
    at NHibernate.Cfg.SettingsFactory.BuildSettings (IDictionary`2 properties) [0x00000] in <filename unknown>:0 
    at NHibernate.Cfg.Configuration.BuildSettings() [0x00000] in <filename unknown>:0 
    at NHibernate.Cfg.Configuration.BuildSessionFactory() [0x00000] in <filename unknown>:0 
    at Castle.ActiveRecord.Framework.SessionFactoryHolder.GetSessionFactory (System.Type type) [0x00000] in <filename unknown>:0 
    at (wrapper remoting-invoke-with-check) Castle.ActiveRecord.Framework.SessionFactoryHolder:GetSessionFactory (System.Type) 
    at Castle.ActiveRecord.Framework.SessionFactoryHolder.CreateSession (System.Type type) [0x00000] in <filename unknown>:0 
    at (wrapper synchronized) Castle.ActiveRecord.Framework.SessionFactoryHolder:CreateSession (System.Type) 
    at Castle.ActiveRecord.ActiveRecordBase.InternalCreate (System.Object instance, Boolean flush) [0x00000] in <filename unknown>:0 
    at Castle.ActiveRecord.ActiveRecordBase.Create (System.Object instance) [0x00000] in <filename unknown>:0 
    at Castle.ActiveRecord.ActiveRecordBase.Create() [0x00000] in <filename unknown>:0 
    at IntervalTool.MainClass.schemaAction (System.String action, System.String filename) [0x00000] in <filename unknown>:0 
    at IntervalTool.MainClass.Main (System.String[] args) [0x00000] in <filename unknown>:0 
[ERROR] FATAL UNHANDLED EXCEPTION: NHibernate.HibernateException: Could not create the driver from NHibernate.Driver.MySqlDataDriver. ---> System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.Configuration.ConfigurationErrorsException: Failed to find or load the registered .Net Framework Data Provider 'MySql.Data.MySqlClient'. 
    at System.Data.Common.DbProviderFactories.GetFactory (System.String providerInvariantName) [0x00000] in <filename unknown>:0 
    at NHibernate.Driver.ReflectionBasedDriver..ctor (System.String providerInvariantName, System.String driverAssemblyName, System.String connectionTypeName, System.String commandTypeName) [0x00000] in <filename unknown>:0 
    at NHibernate.Driver.MySqlDataDriver..ctor() [0x00000] in <filename unknown>:0 
    at (wrapper managed-to-native) System.Reflection.MonoCMethod:InternalInvoke (System.Reflection.MonoCMethod,object,object[],System.Exception&) 
    at System.Reflection.MonoCMethod.Invoke (System.Object obj, BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) [0x00000] in <filename unknown>:0 
    --- End of inner exception stack trace --- 
    at System.Reflection.MonoCMethod.Invoke (System.Object obj, BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) [0x00000] in <filename unknown>:0 
    at System.Reflection.MonoCMethod.Invoke (BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) [0x00000] in <filename unknown>:0 
    at System.Reflection.ConstructorInfo.Invoke (System.Object[] parameters) [0x00000] in <filename unknown>:0 
    at System.Activator.CreateInstance (System.Type type, Boolean nonPublic) [0x00000] in <filename unknown>:0 
    at System.Activator.CreateInstance (System.Type type) [0x00000] in <filename unknown>:0 
    at NHibernate.Bytecode.ActivatorObjectsFactory.CreateInstance (System.Type type) [0x00000] in <filename unknown>:0 
    at NHibernate.Connection.ConnectionProvider.ConfigureDriver (IDictionary`2 settings) [0x00000] in <filename unknown>:0 
    --- End of inner exception stack trace --- 
    at NHibernate.Connection.ConnectionProvider.ConfigureDriver (IDictionary`2 settings) [0x00000] in <filename unknown>:0 
    at NHibernate.Connection.ConnectionProvider.Configure (IDictionary`2 settings) [0x00000] in <filename unknown>:0 
    at NHibernate.Connection.ConnectionProviderFactory.NewConnectionProvider (IDictionary`2 settings) [0x00000] in <filename unknown>:0 
    at NHibernate.Cfg.SettingsFactory.BuildSettings (IDictionary`2 properties) [0x00000] in <filename unknown>:0 
    at NHibernate.Cfg.Configuration.BuildSettings() [0x00000] in <filename unknown>:0 
    at NHibernate.Cfg.Configuration.BuildSessionFactory() [0x00000] in <filename unknown>:0 
    at Castle.ActiveRecord.Framework.SessionFactoryHolder.GetSessionFactory (System.Type type) [0x00000] in <filename unknown>:0 
    at (wrapper remoting-invoke-with-check) Castle.ActiveRecord.Framework.SessionFactoryHolder:GetSessionFactory (System.Type) 
    at Castle.ActiveRecord.Framework.SessionFactoryHolder.CreateSession (System.Type type) [0x00000] in <filename unknown>:0 
    at (wrapper synchronized) Castle.ActiveRecord.Framework.SessionFactoryHolder:CreateSession (System.Type) 
    at Castle.ActiveRecord.ActiveRecordBase.InternalCreate (System.Object instance, Boolean flush) [0x00000] in <filename unknown>:0 
    at Castle.ActiveRecord.ActiveRecordBase.Create (System.Object instance) [0x00000] in <filename unknown>:0 
    at Castle.ActiveRecord.ActiveRecordBase.Create() [0x00000] in <filename unknown>:0 
    at IntervalTool.MainClass.schemaAction (System.String action, System.String filename) [0x00000] in <filename unknown>:0 
    at IntervalTool.MainClass.Main (System.String[] args) [0x00000] in <filename unknown>:0 

Répondre

0

compris. Cela s'est avéré être un problème sensible à la casse, et cela n'avait rien à voir avec castle AR ou NHibernate.

Lorsque j'ai essayé d'utiliser l'assembly MySql.Data sans activeRecord, il m'a donné une exception fichier non trouvé, montrant que le nom de l'assembly comme MySql.Data.dll. J'ai changé le nom de la DLL de mysql.data.dll en MySql.Data.dll et cela a fonctionné. Pourquoi l'assemblage continue à fonctionner dans l'application asp.net mvc avec toutes les lettres minuscules est un mystère pour moi.

Questions connexes