2010-07-16 6 views
5

Je suis tout nouveau à NHibernate et Fluent NHibernate et j'essaye d'obtenir la confguration suivante pour fonctionner.NHibernate Fluent - Configurer Oracle Data Provider 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(); 

    } 

J'ai l'assembly Oracle.DataAccess référencé. J'utilise VS 2010 et .Net 4

Je reçois l'exception suivante:

FluentNHibernate.Cfg.FluentConfigurationException était unhandled message = a été utilisé une configuration incorrecte ou incomplète lors de la création d'un SessionFactory. Vérifiez la collection PotentialReasons et InnerException pour plus de détails.

Source = FluentNHibernate StackTrace: à FluentNHibernate.Cfg.FluentConfiguration.BuildSessionFactory() dans d: \ Établit \ FluentNH \ src \ FluentNHibernate \ Cfg \ FluentConfiguration.cs: ligne 98 à HibernateLearning.Program.CreateSessionFactory() dans C: \ Projets \ CPS Concepts de test \ Main \ Source \ CPSTestConcepts \ Source \ HibernateLearning \ Program.cs: ligne 48 à HibernateLearning.Program.Main (String [] args) dans C: \ Projects \ Concepts de test CPS \ Main \ Source \ CPSTestConcepts \ Source \ HibernateLearning \ Program.cs: ligne 21 à System.AppDomain._nExecuteAssembly (assembly RuntimeAssembly, String [] args) à System.AppDomain.ExecuteAssembly (String assemblyFile, Evidence assemblySecurity, String [] args) à Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly() à System.Threading.ThreadHelper.ThreadStart_Context (état de l'objet) à System.Threading.ExecutionContext.Run (ExecutionContext ExecutionContext, ContextCallback rappel, objet état, Boolean ignoreSyncCtx) à System.Threading.ExecutionContext.Run (ExecutionContext ExecutionContext, rappel ContextCallback, état d'objet) à System.Threading.ThreadHelper.ThreadStart() InnerException: NHibernate.HibernateException message = Impossible de créer le pilote à partir NHibernate.Driver.OracleDataClientDriver, NHibernate , Version = 2.1.2.4000, Culture = neutre, PublicKeyToken = aa95f207798dfdb4. Source = NHibernate StackTrace: à NHibernate.Connection.ConnectionProvider.ConfigureDriver (IDictionary 2 settings) at NHibernate.Connection.ConnectionProvider.Configure(IDictionary 2 paramètres) à NHibernate.Connection.ConnectionProviderFactory.NewConnectionProvider (IDictionary 2 settings) at NHibernate.Cfg.SettingsFactory.BuildSettings(IDictionary 2 propriétés) à NHibernate.Cfg.Configuration.BuildSettings() à NHibernate.Cfg.Configuration.BuildSessionFactory() à FluentNHibernate.Cfg.FluentConfiguration.BuildSessionFactory() dans d: \ Construit \ FluentNH \ src \ FluentNHibernate \ Cfg \ FluentConfiguration.cs: ligne 93 InnerException: message System.Reflection.TargetInvocationException = Une exception a été lancée par la cible d'une invocation. Source = mscorlib StackTrace: à System.RuntimeTypeHandle.CreateInstance (type RuntimeType, Boolean publicOnly, Boolean nocheck, Boolean & canBeCached, RuntimeMethodHandleInternal & cteur, Boolean & bNeedSecurityCheck) à System.RuntimeType.CreateInstanceSlow (Boolean publicOnly, Boolean skipCheckThis, Boolean FillCache) à System.RuntimeType.CreateInstanceDefaultCtor (Boolean publicOnly, Boolean skipVisibilityChecks, Boolean skipCheckThis, Boolean FillCache) à System.Activator.CreateInstance (type de type, booléen non publique) à System.Activator.CreateInstance (type Type) à NHibernate.Bytecode.ActivatorObjectsFactory.Creat eInstance (Type de type) à NHibernate.Connection.ConnectionProvider.ConfigureDriver (paramètres IDictionary`2) InnerException: NHibernate.HibernateException Message = L'implémentation IDbCommand et IDbConnection dans l'assembly Oracle.DataAccess est introuvable. Assurez-vous que l'assembly Oracle.DataAccess se trouve dans le répertoire de l'application ou dans le Global Assembly Cache. Si l'assembly est dans le GAC, utilisez l'élément dans le fichier de configuration de l'application pour spécifier le nom complet de l'assembly. Source = NHibernate StackTrace: à NHibernate.Driver.ReflectionBasedDriver..ctor (String driverAssemblyName, String connectionTypeName, String commandTypeName) à NHibernate.Driver.OracleDataClientDriver..ctor() InnerException:

+0

Pourquoi est-ce un wiki? – DCookie

+0

Je l'ai cliqué par erreur. Pardon. Comment puis-je supprimer le drapeau wiki? –

+0

Vous ne pouvez pas. Vous ne pouvez supprimer et rediffuser Ce n'est pas une grosse affaire, vous n'obtiendrez pas de points de réputation si elle est upvoted. – DCookie

Répondre

7

I figured it out . Lorsque vous référencez l'ODP, vous devez définir la propriété locale copy de la référence sur true sinon il ne trouvera pas les objets recherchés.

Un obstacle, je suis sûr qu'il y en aura plus mais j'adore ces outils!

Paul

0

Vous pouvez également obtenir ce problème si vous avez un décalage entre les plates-formes de la dll ODP et la plate-forme de votre application (x86 vs x64). Changez votre projet pour compiler contre la plate-forme correcte.