2010-07-16 4 views
5

Sono nuovo di zecca per NHibernate e Fluent NHibernate e sto cercando di ottenere la seguente configurazione per funzionare.NHibernate fluente - Configura provider di dati Oracle ODP

private static ISessionFactory CreateSessionFactory() 
{ 
    return Fluently.Configure() 
     .Database(
     OracleDataClientConfiguration.Oracle10.ConnectionString("Data Source=mysource;User ID=myid;Password=mypwd;")     
     ) 
     .Mappings(m => 
      m.FluentMappings.AddFromAssemblyOf<Program>()) 
     .BuildSessionFactory(); 

    } 

Ho l'assembly Oracle.DataAccess a cui si fa riferimento. Sto usando CONTRO 2010 e .Net 4

ottengo la seguente eccezione:

FluentNHibernate.Cfg.FluentConfigurationException è stata gestita Messaggio = una configurazione non valida o incompleta è stato utilizzato durante la creazione di un SessionFactory. Controlla la collezione PotentialReasons e InnerException per maggiori dettagli.

Source = FluentNHibernate StackTrace: a FluentNHibernate.Cfg.FluentConfiguration.BuildSessionFactory() in D: \ Builds \ FluentNH \ src \ FluentNHibernate \ Cfg \ FluentConfiguration.cs: linea 98 a HibernateLearning.Program.CreateSessionFactory() in C: \ Projects \ CPS Test Concepts \ Main \ Source \ CPSTestConcepts \ Source \ HibernateLearning \ Program.cs: riga 48 su HibernateLearning.Program.Main (String [] args) in C: \ Projects \ CPS Test Concepts \ Main \ Source \ CPSTestConcepts \ Source \ HibernateLearning \ Program.cs: riga 21 in System.AppDomain._nExecuteAssembly (assembly RuntimeAssembly, String [] args) in System.AppDomain.ExecuteAssembly (String assemblyFile, Evidence assemblySecurity, String [] args) a Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly() a System.Threading.ThreadHelper.ThreadStart_Context (stato Object) a System.Threading.ExecutionContext.Run (ExecutionContext ExecutionContext, ContextCallback callback, oggetto di stato, booleano ignoreSyncCtx) a System.Threading.ExecutionContext.Run (ExecutionContext ExecutionContext, ContextCallback callback, Object state) a System.Threading.ThreadHelper.ThreadStart() InnerException: NHibernate.HibernateException Message = Impossibile creare il driver dal NHibernate.Driver.OracleDataClientDriver, NHibernate , Versione = 2.1.2.4000, Cultura = neutrale, PublicKeyToken = aa95f207798dfdb4. Source = NHibernate StackTrace: a NHibernate.Connection.ConnectionProvider.ConfigureDriver (IDictionary 2 settings) at NHibernate.Connection.ConnectionProvider.Configure(IDictionary 2 impostazioni) a NHibernate.Connection.ConnectionProviderFactory.NewConnectionProvider (IDictionary 2 settings) at NHibernate.Cfg.SettingsFactory.BuildSettings(IDictionary 2 oggetti) a NHibernate.Cfg.Configuration.BuildSettings() a NHibernate.Cfg.Configuration.BuildSessionFactory() a FluentNHibernate.Cfg.FluentConfiguration.BuildSessionFactory() in d: \ Builds \ FluentNH \ src \ FluentNHibernate \ Cfg \ FluentConfiguration.cs: linea 93 InnerException: System.Reflection.TargetInvocationException Messaggio = L'eccezione è stata lanciata dall'obiettivo di un'invocazione. Source = mscorlib StackTrace: a System.RuntimeTypeHandle.CreateInstance (tipo RuntimeType, booleano publicOnly, booleano NOCHECK, booleano & canBeCached, RuntimeMethodHandleInternal & ctor, booleano & bNeedSecurityCheck) a System.RuntimeType.CreateInstanceSlow (booleano publicOnly, booleano skipCheckThis, booleano FillCache) a System.RuntimeType.CreateInstanceDefaultCtor (booleano publicOnly, booleano skipVisibilityChecks, booleano skipCheckThis, booleano FillCache) a System.Activator.CreateInstance (tipo tipo, booleano non pubbliche) a System.Activator.CreateInstance (tipo Type) a NHibernate.Bytecode.ActivatorObjectsFactory.Creat eInstance (Tipo tipo) presso NHibernate.Connection.ConnectionProvider.ConfigureDriver (impostazioni IDictionary`2) InnerException: NHibernate.HibernateException Message = L'implementazione IDbCommand e IDbConnection nell'assembly Oracle.DataAccess non è stata trovata. Assicurarsi che l'assembly Oracle.DataAccess si trovi nella directory dell'applicazione o nella Global Assembly Cache. Se l'assembly si trova nella GAC, utilizzare l'elemento nel file di configurazione dell'applicazione per specificare il nome completo dell'assembly. Source = NHibernate StackTrace: a NHibernate.Driver.ReflectionBasedDriver..ctor (String driverAssemblyName, String connectionTypeName, String commandTypeName) a NHibernate.Driver.OracleDataClientDriver..ctor() InnerException:

+0

Perché questo è un wiki? – DCookie

+0

Ho cliccato per errore. Scusate. Come rimuovo la bandiera wiki? –

+0

Non puoi. Puoi solo cancellare e ripubblicare. Non è un grosso problema, non otterrai punti reputazione se è in promozione. – DCookie

risposta

7

ho capito . Quando fai riferimento a ODP, devi impostare la proprietà locale di copia del riferimento su true altrimenti non troverà gli oggetti che sta cercando.

Un ostacolo, sono sicuro che ce ne saranno altri ma amo questi strumenti!

Paul

0

Si potrebbe anche ottenere questo problema se si dispone di una mancata corrispondenza tra le piattaforme del dll ODP e la piattaforma della vostra applicazione (86 vs 64). Cambia il tuo progetto per compilare la piattaforma corretta.