2010-11-17 9 views
5

i tu wewnętrzny wyjątek w końcu:nieprawidłowy lub niekompletny układ był używany przy tworzeniu się SessionFactory

nie można załadować pliku lub zestawu „ByteCode.Castle” lub jedną z jego zależności. System nie może odnaleźć określonego pliku.

dodaję wszystkie odniesienia do NHibernate, używane przez cały buduje tutaj jest mój kod:

użyciu NHibernate; przy użyciu FluentNHibernate; przy użyciu NHibernate.Cfg; using System.Reflection; przy użyciu FluentNHibernate.Cfg.Db; przy użyciu FluentNHibernate.Cfg; przy użyciu NHibernate.ByteCode.Castle; przy użyciu Castle.Core; przy użyciu Castle.DynamicProxy;

nazw _3adaseh { publicznych klasy statyczne NHibernateHelper { private static void ReferByteCode() { // Wystarczy upewnić się, że ByteCodeCastle jest ładowany ProxyFactory fałszywy = 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 
} 

}

mogłam testowy niczego tak daleko, jestem naprawdę nudzi tego błędu, dodałem NHibernate odniesień do wszystkich moich klasowych bibliotek i nic nie jest stałe, może ktoś pomóc proszę? ?

Odpowiedz

2

Upewnij się, że masz odwołania do zbiorów do NHibernate.ByteCode.Castle.dll i Castle.Core.dll (i Castle.DynamicProxy2.dll, jeśli używasz NH2.1.2) *, aby upewnić się, że zostały skopiowane do katalog wyjściowy. Którą wersję Fluent NHibernate i NHibernate używasz?

* Castle.DynamicProxy2.dll został scalony z Castle.Core.dll. Nowsza scalona wersja Castle.Core.dll jest używana w NH3.

+0

Okej tutaj jest moja struktura to Project.Mappings, Project. Entites, Project.UnitTesting, Project.Business, – user510336

+0

Używam tego w testowaniu jednostkowym, pomocnik nhibernate istnieje w biznesie, przechodzę do płynnego pobierania witryny hibernacji i pobierania płynnego nhibernate i używania wszystkich bibliotek dll w pobranym pliku, tutaj są wersje i użył fluentnhibernate-binary-1.2.0.690 , fluentnhibernate-binary-1.2.0.691 .. Dodaję odniesienie do tych w prawie wszystkich moich projektach, plus kolekcje iesi n log4net – user510336

+0

używając NHibernate; przy użyciu FluentNHibernate; przy użyciu NHibernate.Cfg; using System.Reflection; przy użyciu FluentNHibernate.Cfg.Db; przy użyciu FluentNHibernate.Cfg; przy użyciu NHibernate.ByteCode.Castle; przy użyciu Castle.Core; przy użyciu Castle.DynamicProxy; tutaj jest użycie części w nhibernate helper btw, oto co robię Dostałem zewnętrzny folder o nazwie referencje i wykonuję wszystkie referencje przez ten folder, więc kiedy pobieram nową wersję, wyczyszczam tylko ten folder i umieszczam wszystkie referencje w środku tego. – user510336

0

Tak, dokładnie to, co powiedział James. Ponieważ fabryka proxy jest określona tylko w konfiguracji dla NHibernate i nie jest faktycznie używana przez żadną bibliotekę klasy w rozwiązaniu, nie jest (zawsze) kopiowana do projektu aplikacji na kompilacji.

To, co działa dla mnie, to odwoływanie się do absolutnego minimum we wszystkich bibliotekach klas, a następnie odwoływanie się do wszystkich dodatkowych bitów i elementów bezpośrednio w projekcie aplikacji. Projekt aplikacji powie mi, czego brakuje, gdy próbuję go uruchomić. Rzeczy takie jak fabryka proxy (NHibernate.ByteCode.Castle, Castle.Core i Castle.DynamicProxy), dodatkowa pamięć podręczna (NHibernate.Caches.SysCache) i parsowanie HQL (Antlr3.Runtime) itd. Po prostu dodawaj je jako referencje w projekt aplikacyjny po każdej skardze.

Edit

W błędu pan pisał to nie skarży o znalezieniu 'ByteCode.Castle'. Omawiany montaż jest w rzeczywistości "NHibernate.ByteCode.Castle". Błąd może znajdować się w pliku App.config lub Web.config, w którym zdefiniowano fabrykę proxy. Czy poprawnie wpisałeś nazwę zespołu?

<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

jak mogę dodać je jako referencje dla całego projektu? – user510336

+0

Używam testów jednostkowych i nie chcę mieć żadnych konfiguracji w app.config lub web.config, ale używam biblioteki klas (mogę dodać app.config tam?!?!?) – user510336

0

Ok tu był problem, w moim kodu pisałem

ProxyFactoryFactory ("kodu bajtowego.Castle.ProxyFactoryFactory, ByteCode.Castle ");

bez słowa NHibernate jak czytam NHibernate 2.1 usuwa to słowo z odniesieniami więc szukał bytecode.castle, a kiedy była zmiana nazwy tego dll to robił i Mów mi swatka Stworzyłem wielki bałagan sam, teraz właśnie usunąłem nazwę nhibernate i dodałem odniesienia ręcznie ..... i to działa ręcznie, dzięki wszystkim :)

Powiązane problemy