NHibernate - Обзор

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

Что такое NHibernate?

NHibernate - это зрелый объектно-реляционный преобразователь с открытым исходным кодом для платформы .NET. Он активно развивается, полно функционал и используется в тысячах успешных проектов. Он построен поверхADO.NET и текущая версия NHibernate 4.0.4.

  • NHibernate - это объектно-реляционный преобразователь .NET с открытым исходным кодом, который распространяется под GNU Lesser General Public License.

  • Он основан на Hibernate, популярном объектно-реляционном картографе Java, и имеет очень зрелую и активную кодовую базу.

  • Он обеспечивает основу для сопоставления объектно-ориентированной модели предметной области с традиционной реляционной базой данных.

  • NHibernate был запущен Tom Barrett и этот проект существует с февраля 2003 года, когда они впервые совершили коммит.

  • Это большой проект, который предоставляет множество функций.

  • Существует NuGet package доступно, что упрощает добавление в проект.

Почему NHibernate?

Теперь вопрос, зачем нам object-relational mappers? Это потому, что существует разрыв между объектным миром и миром отношений.

  • В объектном мире все основано на objects; мы назвали объектами те вещи, которые имеют наши данные.

  • Реляционный мир основан на наборах, и мы имеем дело с таблицами и строками, которые отличаются от объектного мира.

  • В объектном мире у нас есть unidirectional associations. Если у покупателя есть указатель на заказ, это не обязательно означает, что в заказе есть указатель на покупателя, это может быть, а может и нет.

  • В мире отношений все ассоциации bidirectional и это можно сделать с помощью внешнего ключа.

  • Все ассоциации по своей природе двунаправлены, поэтому, когда мы имеем дело с объектно-реляционным отображением, нам также необходимо иметь дело с этим разрывом.

  • В объектном мире мы работаем с указателями, которые являются однонаправленными, тогда как в реляционном мире у нас есть внешние ключи, которые по своей природе двунаправлены.

  • В объектном мире есть понятие наследования, в котором транспортное средство может иметь несколько различных подклассов, поэтому автомобиль - это тип транспортного средства, лодка - это тип транспортного средства, а спортивный автомобиль - это тип автомобиля, эти типы отношения наследования.

  • В мире отношений нет такого понятия наследования.

Картография

Итак, как нам сопоставить все это disjoint relationships?Эта концепция сопоставления исходит от объектно-реляционного сопоставителя. Как показано на следующей диаграмме, необходимо понять в основном три вещи.

  • В вашем приложении вам потребуются определения классов, которые обычно представляют собой код C # и его код .NET, представляющий наши классы, такие как класс Employee, класс Customer, класс заказа и т. Д.

  • Внизу вы можете увидеть схему базы данных, которая является нашим Data Definition Language в реляционной базе данных, которая определяет, как выглядит таблица клиентов, как выглядит таблица сотрудников.

  • Между ними у нас есть метаданные сопоставления, которые сообщают объектно-реляционному сопоставителю, как преобразовать объектный мир C # в мир баз данных в терминах строк и столбцов и отношений внешнего ключа.

  • Эти метаданные сопоставления могут быть представлены множеством различных способов, и мы рассмотрим несколько из них, наиболее типичных для приложения NHibernate.

  • Он представлен HBM (Hibernate Mapping) файлы, которые являются файлами XML.

База данных поддерживается

NHibernate поддерживает широкий спектр различных баз данных. Доступ к любой существующей реляционной базе данных можно получить в NHibernate.

  • SQL-сервер - это основная поддерживаемая база данных, это то, что большинство разработчиков используют во время разработки, вероятно, самая распространенная.

  • Это также works very well with Oracle.

  • Он также поддерживает DB2, Firebird, MySQL, PostgreSQL, SQL Lite.

  • Он также имеет ODBC and OLEDB drivers.