Reputation: 373
and here is the inner exception at the end :
Could not load file or assembly 'ByteCode.Castle' or one of its dependencies. The system cannot find the file specified.
I am adding all references for nhibernate , used all the builds here is my code :
using NHibernate; using FluentNHibernate; using NHibernate.Cfg; using System.Reflection; using FluentNHibernate.Cfg.Db; using FluentNHibernate.Cfg; using NHibernate.ByteCode.Castle; using Castle.Core; using Castle.DynamicProxy;
namespace _3adaseh { public static class NHibernateHelper { private static void ReferByteCode() { //Just to make sure the ByteCodeCastle is loaded ProxyFactory fake = 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
}
}
I couldnt test anything so far , I am really getting bored of this error , I added nhibernate references to all my class libraries and nothing is being fixed , can anyone help please??
Upvotes: 5
Views: 14171
Reputation: 373
Okay here was the problem , in my code I was writing
ProxyFactoryFactory("ByteCode.Castle.ProxyFactoryFactory, ByteCode.Castle");
without the word nhibernate as i read nhibernate 2.1 removed that word from references so it was searching for bytecode.castle , and when i was renaming that dll it was making a missmatch and i was creating a big mess by myself ,now i just removed the name nhibernate and added references manually.....and it's working manually , thanks all :)
Upvotes: 0
Reputation: 6800
Yes, exactly what James said. Since the proxy factory is only specified in the config for NHibernate and not actually used by any of the class libraries in a solution, it doesn't (always) get copied to the application project on build.
What works for me is to only reference the bare minimum in all the class libraries, then reference all the extra bits and pieces directly in the application project. The application project will tell me what it is missing when I try to run it. Things like the proxy factory (NHibernate.ByteCode.Castle, Castle.Core and Castle.DynamicProxy), secondary cache (NHibernate.Caches.SysCache), and HQL parsing (Antlr3.Runtime), etc. Just keep adding them as references in the application project after each complaint.
Edit
In the error you've posted it's complaining about not finding 'ByteCode.Castle'. The assembly in question is actually 'NHibernate.ByteCode.Castle'. The error may be in your App.config or Web.config where you've defined the proxy factory. Have you typed the assembly name correctly?
<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>
Upvotes: 0
Reputation: 11651
Make sure that you have assembly references to NHibernate.ByteCode.Castle.dll and Castle.Core.dll (and Castle.DynamicProxy2.dll if you're using NH2.1.2)* to ensure that it is copied into the output directory. Which version of Fluent NHibernate and NHibernate are you using?
* Castle.DynamicProxy2.dll was merged with Castle.Core.dll. The newer merged version of Castle.Core.dll is used in NH3.
Upvotes: 2