Недопустимая или неполная конфигурация была использована при создании SessionFactory - PullRequest
5 голосов
/ 17 ноября 2010

и вот внутреннее исключение в конце:

Не удалось загрузить файл или сборку ByteCode.Castle или одну из ее зависимостей.Системе не удается найти указанный файл.

Я добавляю все ссылки для nhibernate, используются все сборки, вот мой код:

using NHibernate;используя FluentNHibernate;используя NHibernate.Cfg;using System.Reflection;использование FluentNHibernate.Cfg.Db;используя FluentNHibernate.Cfg;использование NHibernate.ByteCode.Castle;используя Castle.Core;using Castle.DynamicProxy;

пространство имен _3adaseh {открытый статический класс NHibernateHelper {private static void ReferByteCode () {// Просто чтобы убедиться, что ByteCodeCastle загружен 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
}

}

Пока что я ничего не смог протестировать, мне очень надоело эту ошибку, я добавил nhibernate-ссылки на все мои библиотеки классов и ничего не исправляется, может кто-нибудьпомогите пожалуйста ??

Ответы [ 3 ]

2 голосов
/ 17 ноября 2010

Убедитесь, что у вас есть ссылки на сборки для NHibernate.ByteCode.Castle.dll и Castle.Core.dll (и Castle.DynamicProxy2.dll, если вы используете NH2.1.2) *, чтобы обеспечить его копирование в выводкаталог.Какую версию Fluent NHibernate и NHibernate вы используете?

* Castle.DynamicProxy2.dll был объединен с Castle.Core.dll.Более новая объединенная версия Castle.Core.dll используется в NH3.

0 голосов
/ 18 ноября 2010

Хорошо, здесь была проблема, в моем коде я писал

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

без слова nhibernate, когда я читал nhibernate 2.1, удалил это слово из ссылок, так что он искал bytecode.castle, и когда я переименовывал эту dll, она делала несоответствие, и я создавал большой беспорядок, теперь я просто удалил имя nhibernate и добавил ссылки вручную ..... и он работает вручную, спасибо всем:)

0 голосов
/ 18 ноября 2010

Да, именно то, что сказал Джеймс.Поскольку фабрика прокси указывается только в конфигурации для NHibernate и фактически не используется ни одной из библиотек классов в решении, она не (всегда) копируется в проект приложения при сборке.

Что работаетдля меня это только ссылаться на минимум во всех библиотеках классов, а затем ссылаться на все дополнительные фрагменты непосредственно в проекте приложения.Проект приложения скажет мне, чего ему не хватает, когда я попытаюсь его запустить.Такие вещи, как фабрика прокси (NHibernate.ByteCode.Castle, Castle.Core и Castle.DynamicProxy), вторичный кеш (NHibernate.Caches.SysCache) и синтаксический анализ HQL (Antlr3.Runtime) и т. Д. Просто продолжайте добавлять их как ссылки впроект приложения после каждой жалобы.

Редактировать

В сообщенной вами ошибке он жалуется на отсутствие 'ByteCode.Castle'.Обсуждаемая сборка на самом деле является «NHibernate.ByteCode.Castle».Ошибка может быть в вашем App.config или Web.config, где вы определили фабрику прокси.Правильно ли вы ввели название сборки?

<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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...