2010-11-17 9 views
5

e qui è l'eccezione interna alla fine:Una configurazione valida o incompleta è stata utilizzata durante la creazione della SessionFactory

Impossibile caricare il file o assembly 'ByteCode.Castle' o una delle sue dipendenze. Il sistema non trova il file specificato.

sto aggiungendo tutti i riferimenti per NHibernate, utilizzato in tutto le generazioni qui è il mio codice:

usando NHibernate; utilizzando FluentNHibernate; utilizzando NHibernate.Cfg; usando System.Reflection; utilizzando FluentNHibernate.Cfg.Db; utilizzando FluentNHibernate.Cfg; utilizzando NHibernate.ByteCode.Castle; utilizzando Castle.Core; usando Castle.DynamicProxy;

namespace _3adaseh { classe public static NHibernateHelper { ReferByteCode private static void() { // solo per assicurarsi che il ByteCodeCastle viene caricato ProxyFactory falso = new ProxyFactory(); }

#region Session 
    private static ISessionFactory _sessionFactory; 

    private static ISessionFactory SessionFactory 
    { 
     get 
     { 
      if (_sessionFactory == null) 
      { 
       ReferByteCode(); 
       var configuration = new Configuration(); 
       #region Configuring Fluent NHibernate 
       IPersistenceConfigurer persistenceConfigurer = MsSqlConfiguration.MsSql2008.ConnectionString("Data Source=.;Initial Catalog=3adaseh;Integrated Security=True").ShowSql().ProxyFactoryFactory("ByteCode.Castle.ProxyFactoryFactory, ByteCode.Castle"); 
       // 
       // initialize nhibernate with persistance configurer properties 
       //Configuration cfg = persistenceConfigurer.ConfigureProperties(new Configuration()); 
       //var persistenceModel = new PersistenceModel(); 
       //persistenceModel.AddMappingsFromAssembly(Assembly.Load("3adaseh.Mappings")); 
       //persistenceModel.Configure(cfg); 
       try 
       { 
        _sessionFactory = Fluently.Configure().Database(persistenceConfigurer).Mappings(m => m.FluentMappings.AddFromAssembly(Assembly.Load("3adaseh.Mappings"))).BuildSessionFactory(); 
       } 
       catch (System.Exception ex) 
       { 
        throw ex; 
       } 

       //cfg.SetProperty(
       // add mappings definition to nhibernate configuration 
       //try 
       //{ 
       // var persistenceModel = new PersistenceModel(); 
       // persistenceModel.AddMappingsFromAssembly(Assembly.Load("3adaseh.Mappings")); 
       // persistenceModel.Configure(cfg); 
       // _sessionFactory = configuration.BuildSessionFactory(); 
       //} 
       //catch (System.Exception ex) 
       //{ 
       // throw ex; 
       //} 
        #endregion 




      } 
      return _sessionFactory; 
     } 
    } 

    public static ISession OpenSession() 
    { 
     return SessionFactory.OpenSession(); 
    } 
    #endregion 

    #region CRUD Operations 
    public static void Add<T>(T newObject) 
    { 
     using (ISession session = NHibernateHelper.OpenSession()) 
     { 
      using (ITransaction transaction = session.BeginTransaction()) 
      { 
       session.Save(newObject); 
       transaction.Commit(); 
      } 
     } 
    } 


    public static void Update<T>(T updatedObject) 
    { 
     using (ISession session = NHibernateHelper.OpenSession()) 
     { 
      using (ITransaction transaction = session.BeginTransaction()) 
      { 
       session.Update(updatedObject); 
       transaction.Commit(); 
      } 
     } 
    } 

    public static void Remove<T>(T deletedObject) 
    { 
     using (ISession session = NHibernateHelper.OpenSession()) 
     { 
      using (ITransaction transaction = session.BeginTransaction()) 
      { 
       session.Delete(deletedObject); 
       transaction.Commit(); 
      } 
     } 
    } 

    public static T GetById<T>(int objectID) 
    { 
     using (ISession session = NHibernateHelper.OpenSession()) 
     { 
      using (ITransaction transaction = session.BeginTransaction()) 
      { 
       return session.Get<T>(objectID); 
      } 
     } 
    } 
    #endregion 
} 

}

non potevo prova nulla finora, sono davvero annoiando di questo errore, ho aggiunto i riferimenti NHibernate a tutti i miei librerie di classi e nulla è stato fissato, qualcuno può aiuto per favore? ?

risposta

2

Assicurarsi di disporre dei riferimenti di assembly a NHibernate.ByteCode.Castle.dll e Castle.Core.dll (e Castle.DynamicProxy2.dll se si utilizza NH2.1.2) * per assicurarsi che sia copiato nel cartella di destinazione. Quale versione di Fluent NHibernate e NHibernate stai usando?

* Castle.DynamicProxy2.dll è stato unito a Castle.Core.dll. La versione più recente di Castle.Core.dll è utilizzata in NH3.

+0

Ok ecco la mia struttura c'è Project.Mappings, Project. Entites, Project.UnitTesting, Project.Business, – user510336

+0

Sto eseguendo questo in testing unitario, l'helper nibernetico esiste nel mondo degli affari, vado al sito web di ibernazione fluente scarica e scarica fluente nibernato e uso tutte le DLL nel file scaricato, ecco le versioni i usato fluentnhibernate-binary-1.2.0.690 , fluentnhibernate-binary-1.2.0.691 .. Sto aggiungendo riferimenti a quelli di quasi tutti i miei progetti, oltre a collezioni di iesi n log4net – user510336

+0

utilizzando NHibernate; utilizzando FluentNHibernate; utilizzando NHibernate.Cfg; usando System.Reflection; utilizzando FluentNHibernate.Cfg.Db; utilizzando FluentNHibernate.Cfg; utilizzando NHibernate.ByteCode.Castle; utilizzando Castle.Core; usando Castle.DynamicProxy; , ecco la parte che usa l'helper nhibernate btw, ecco cosa faccio Ho una cartella esterna chiamata reference e faccio tutti i riferimenti attraverso quella cartella, quindi quando scarico una nuova versione rimuovo solo questa cartella e metto tutti i riferimenti dentro. – user510336

0

Sì, esattamente quello che James ha detto. Poiché la factory proxy è specificata solo nella configurazione di NHibernate e non è effettivamente utilizzata da nessuna delle librerie di classi in una soluzione, non viene (sempre) copiata nel progetto dell'applicazione su build.

Ciò che funziona per me è solo fare riferimento al minimo indispensabile in tutte le librerie di classi, quindi fare riferimento a tutti i bit e le parti extra direttamente nel progetto dell'applicazione. Il progetto dell'applicazione mi dirà cosa manca quando cerco di eseguirlo. Cose come la factory proxy (NHibernate.ByteCode.Castle, Castle.Core e Castle.DynamicProxy), la cache secondaria (NHibernate.Caches.SysCache) e l'analisi HQL (Antlr3.Runtime), ecc. Basta continuare ad aggiungerli come riferimenti nel progetto di applicazione dopo ogni reclamo.

Modifica

In l'errore che hai postato si lamenta di non trovare 'ByteCode.Castle'. L'assembly in questione è in realtà "NHibernate.ByteCode.Castle". L'errore potrebbe essere in App.config o Web.config in cui è stato definito il factory proxy. Hai digitato correttamente il nome dell'assembly?

<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2"> 
    <session-factory> 
     ... 
     <property name="proxyfactory.factory_class">NHibernate.ByteCode.Castle.ProxyFactoryFactory, NHibernate.ByteCode.Castle</property> 
     ... 
    </session-factory> 
</hibernate-configuration> 
+0

come posso aggiungerli come riferimenti per l'intero progetto ?? – user510336

+0

Sto usando test di unità e non voglio avere alcuna configurazione in app.config o web.config, sto usando però la libreria di classi (posso aggiungere app.config lì?!?!?) – user510336

0

Va bene qui era il problema, nel mio codice stavo scrivendo

ProxyFactoryFactory ("bytecode.Castle.ProxyFactoryFactory, ByteCode.Castle ");

senza la parola nhibere mentre ho letto nhibernate 2.1 ha rimosso quella parola dai riferimenti quindi cercava bytecode.castle, e quando stavo cambiando il nome quella dll stava facendo un missmatch e stavo creando un grande casino da solo, ora ho appena rimosso il nome nhibner e aggiunto i riferimenti manualmente ..... e funziona manualmente, grazie a tutti :)

Problemi correlati