NHibernate - NHibernate

NHibernate
NHibernate-logo.svg
Стабильный выпуск
5.3.8 / 5 апреля 2021 г . ; 3 месяца назад ( 2021-04-05 )
Репозиторий Отредактируйте это в Викиданных
Написано в C #
Операционная система Кроссплатформенность
Платформа .NET 4.6.1, .NET Standard 2.0, .NET Core 2.0 и Mono
Тип Объектно-реляционное отображение
Лицензия Стандартная общественная лицензия ограниченного применения GNU 2.1
Веб-сайт http://nhibernate.info

NHibernate - это решение объектно-реляционного сопоставления (ORM) для платформы Microsoft .NET . Он обеспечивает основу для сопоставления объектно-ориентированной модели предметной области с традиционной реляционной базой данных . Его цель - освободить разработчика от значительной части задач программирования, связанных с сохранением реляционных данных . NHibernate - бесплатное программное обеспечение с открытым исходным кодом , которое распространяется под Стандартной общественной лицензией ограниченного применения GNU . NHibernate - это порт Hibernate .

Краткое описание характеристик

Основная функция NHibernate - отображение классов .NET в таблицы базы данных (и из типов данных CLR в типы данных SQL ). NHibernate также предоставляет средства запроса и извлечения данных. NHibernate генерирует команды SQL и избавляет разработчика от ручной обработки наборов данных и преобразования объектов, сохраняя переносимость приложения для большинства баз данных SQL, а переносимость базы данных обеспечивается с очень небольшими накладными расходами.

NHibernate обеспечивает прозрачное постоянство для обычных старых объектов CLR (POCO). Единственное строгое требование для постоянного класса - конструктор без аргументов, который не обязательно должен быть общедоступным. (Правильное поведение в некоторых приложениях также требует особого внимания к методам Equals () и GetHashCode ().)

История

NHibernate был основан Томом Барреттом, а позже его подхватили Майк Дёрфлер и Питер Смуловичс. В конце 2005 года компания JBoss , Inc. (ныне часть Red Hat ) наняла Сергея Кощеева, тогдашнего ведущего разработчика NHibernate, для работы над его будущими версиями на полную ставку. В конце 2006 года JBoss прекратил поддержку этого проекта; теперь он полностью разработан и возглавляется сообществом.

Версия 1.0 отражает набор функций Hibernate 2.1, а также ряд функций Hibernate 3.

NHibernate 1.2.1, выпущенный в ноябре 2007 года, представил гораздо больше функций из Hibernate 3 и поддержку .NET 2.0, хранимых процедур , универсальных типов и типов, допускающих значение NULL.

NHibernate 2.0

NHibernate 2.0 был выпущен 23 августа 2008 года. По своим возможностям он сопоставим с Hibernate 3.2. С выпуском версии 2.0 NHibernate отказался от поддержки .NET 1.1.

NHibernate 2.1 был выпущен 17 июля 2009 года.

NHibernate 3.0

NHibernate 3.0 был выпущен 4 декабря 2010 года и является первой версией, использующей .NET 3.5, с такими функциями, как:

  • Интегрированная поддержка LINQ
  • Строго типизированный API-интерфейс, подобный критериям, под названием QueryOver
  • Новый парсер на базе AST для движка HQL
  • Поддержка ленивой загрузки столбцов.

NHibernate 3.2

NHibernate 3.2 был выпущен в апреле 2011 года. Некоторые из новых функций:

  • Отображение по коду: плавная настройка, файлы .hbm.xml больше не требуются;
  • Подвыбор: возможность отображать представления SQL как сущности;
  • Пейджинг HQL: TAKE и SKIP на HQL;
  • Встроенный провайдер байт-кода: на одну DLL меньше для развертывания.

NHibernate 4.0

NHibernate 4.0 был выпущен 17 августа 2014 года. Для этой версии требуется .NET Framework 4.0 или более поздняя версия .

NHibernate 5.0

NHibernate 5.0 был выпущен 10 октября 2017 года. Он обеспечивает поддержку асинхронного программирования. Для этой версии требуется .NET Framework 4.6.1 или новее.

NHibernate 5.1

NHibernate 5.1 был выпущен 17 марта 2018 года. Он поддерживает .NET Standard 2.0 и .NET Core 2.0.

NHibernate 5.2

NHibernate 5.2 был выпущен 4 декабря 2018 года.

NHibernate 5.3

NHibernate 5.3 был выпущен 19 июля 2020 года.

Взносы

Как программное обеспечение с открытым исходным кодом NHibernate получило много отзывов от пользователей. Реализация LINQ позволила использовать Language Integrated Query с NHibernate.

Профилировщик NHibernate

NHibernate Profiler - это инструмент объектно-реляционного сопоставления (ORM), который служит визуальным отладчиком в реальном времени для NHibernate. Он выявляет неэффективные запросы данных SQL, чтобы исключить ненужную работу со стороны базы данных и повысить общую производительность приложения. Профилировщик NHibernate также предупреждает пользователей о запросах данных, которые требуют слишком больших затрат времени, и направляет их на точную строку в коде C # .

Образец

Здесь фрагмент кода для добавления объекта в базу данных и показывает, как получить, изменить и обновить объект в базе данных с помощью NHibernate.

//Add a Customer to the datastore

//'sessionFactory' is a thread-safe object built once per application lifetime (can take seconds to build)
//based on configuration files which control how database tables are mapped to C# objects
//(e.g. which property maps to which column in a database table)
//
//'session' is not thread safe and fast to obtain and can be thought of as a connection to the database
using (var session = sessionFactory.OpenSession()) 
{
    //transaction represents a db transaction
    using (ITransaction transaction = session.BeginTransaction()) 
    {
        //The line below adds the customer to NHibernate's list of objects to insert to the database
        //but it doesn't execute SQL insert command at this stage*.
        //*if the Id field is generated by the database (e.g. an auto-incremented number) 
        //then NHibernate will execute SQL INSERT when .Save is called  
        session.Save(new Customer { Id = Guid.NewGuid(), FirstName = "Boss", Age = 50 });

        //The call below will execute the SQL INSERT and commit the transaction
        transaction.Commit();
    }
}

//Retrieve the Customer from the database, modify the record and update the database
using (var session = sessionFactory.OpenSession())
{
    using (ITransaction transaction = session.BeginTransaction()) 
    {
        // session's Query returns IQueryable<Customer>.
        // Only when .FirstOrDefault is called will NHibernate execute the SQL query  
        Customer customer = session.Query<Customer>().Where(c => c.Token == token).FirstOrDefault();
    
        // Now the customer is 'part of' the 'session' object and NHibernate keeps track of changes
        // made to it 
        if (customer != null) 
        {
            // Changing a property of an object does NOT cause SQL to be executed
            customer.TokenVerified = true;
    
            // Committing the transaction results in an SQL UPDATE statement
            // NHibernate kept track of the fact that 'customer' has been changed since loading 
            transaction.Commit();
        }
    }
}

Конфигурация NHibernate может повлиять на выполнение NHibernate операторов SQL.

Смотрите также

Рекомендации

Библиография

Внешние ссылки