2011-11-05 46 views
0

我正在玩Castle activeRecord,並且我已經成功地製作了一個asp.net MVC應用程序,它可以生成模式,執行crud操作並查詢mysql數據庫。我在MonoDevelop中做了這個。不能在單聲道命令行應用程序中使用castle activerecord?

Werid的事情是,如果我在一個命令行項目中使用幾乎相同的代碼,這是行不通的,拋出了以下異常:

Could not create the driver from NHibernate.Driver.MySqlDataDriver

的異常在中pc.Create();拋出代碼如下。即使我告訴它產生模式,這實際上從來沒有發生過,但它確實發生在Web應用程序中。

此消息的一些Google指示表明發生這種情況時,mysql.data.dll文件不在路徑或引用等等。它被引用,並且「本地複製」已啓用,因此它被複制到調試文件夾。我已經檢查過它確實存在於文件夾中。

我有完全相同的參考加載爲asp.net mvc應用程序。爲什麼失敗?

這裏是命令行應用程序的代碼:

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; } 

    } 
} 

這裏是堆棧跟蹤:

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 

回答

0

了它。這原來是一個大小寫敏感的問題,與城堡AR或NHibernate沒有任何關係。

當我嘗試使用沒有activeRecord的MySql.Data程序集時,它給了我一個未找到的文件異常,顯示程序集名稱爲MySql.Data.dll。我將dll的名字從mysql.data.dll改成了MySql.Data.dll,它工作正常。

爲什麼程序集繼續在asp.net mvc應用程序中工作,所有小寫字母對我來說都是一個謎。

相關問題