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.