В этой главе мы обсудим, что такое NHibernate, на каких платформах он может быть реализован, каковы его преимущества и другие аспекты, связанные с ним.
Что такое NHibernate?
NHibernate — это зрелый объектно-реляционный картограф с открытым исходным кодом для платформы .NET. Он активно развивается, полнофункциональный и используется в тысячах успешных проектов. Он построен на основе ADO.NET, и текущей версией является NHibernate 4.0.4.
-
NHibernate — это объектно-реляционный картограф с открытым исходным кодом .NET, распространяемый по лицензии GNU Lesser General Public License .
-
Он основан на Hibernate, популярном объектно-реляционном маппере Java, и имеет очень зрелую и активную базу кода.
-
Он обеспечивает основу для сопоставления объектно-ориентированной модели предметной области с традиционной реляционной базой данных.
-
NHibernate был запущен Томом Барреттом, и этот проект существует с февраля 2003 года, что стало их первым обязательством.
-
Это большой проект и предоставляет много функциональности.
-
Доступен пакет NuGet , который позволяет очень легко добавить в проект.
NHibernate — это объектно-реляционный картограф с открытым исходным кодом .NET, распространяемый по лицензии GNU Lesser General Public License .
Он основан на Hibernate, популярном объектно-реляционном маппере Java, и имеет очень зрелую и активную базу кода.
Он обеспечивает основу для сопоставления объектно-ориентированной модели предметной области с традиционной реляционной базой данных.
NHibernate был запущен Томом Барреттом, и этот проект существует с февраля 2003 года, что стало их первым обязательством.
Это большой проект и предоставляет много функциональности.
Доступен пакет NuGet , который позволяет очень легко добавить в проект.
Почему именно NHibernate?
Теперь вопрос: зачем нам объектно-реляционные картографы? Это потому, что существует разрыв между объектным миром и миром отношений.
-
В объектном мире все основано на объектах ; мы называли объекты теми вещами, которые имеют наши данные.
-
Весь реляционный мир основан на множествах, и мы имеем дело с таблицами и строками, которые отличаются от мира объектов.
-
В объектном мире у нас есть однонаправленные ассоциации . Если у клиента есть указатель на заказ, это не обязательно означает, что у заказа есть указатель на клиента, это может быть или не быть.
-
В реляционном мире все ассоциации являются двунаправленными, и это может быть сделано с помощью внешнего ключа.
-
Все ассоциации по своей природе являются двунаправленными, поэтому, когда мы имеем дело с объектно-реляционным отображением, нам также необходимо иметь дело с этим разъединением.
-
В объектном мире мы работаем с однонаправленными указателями, тогда как в реляционном мире у нас есть внешние ключи, которые по своей природе являются двунаправленными.
-
В объектном мире есть понятие наследования, где транспортное средство может иметь несколько различных подклассов, поэтому автомобиль — это тип транспортного средства, лодка — это тип транспортного средства, а спортивная машина — это тип автомобиля, эти типы наследственные отношения.
-
В реляционном мире нет этого понятия наследования.
В объектном мире все основано на объектах ; мы называли объекты теми вещами, которые имеют наши данные.
Весь реляционный мир основан на множествах, и мы имеем дело с таблицами и строками, которые отличаются от мира объектов.
В объектном мире у нас есть однонаправленные ассоциации . Если у клиента есть указатель на заказ, это не обязательно означает, что у заказа есть указатель на клиента, это может быть или не быть.
В реляционном мире все ассоциации являются двунаправленными, и это может быть сделано с помощью внешнего ключа.
Все ассоциации по своей природе являются двунаправленными, поэтому, когда мы имеем дело с объектно-реляционным отображением, нам также необходимо иметь дело с этим разъединением.
В объектном мире мы работаем с однонаправленными указателями, тогда как в реляционном мире у нас есть внешние ключи, которые по своей природе являются двунаправленными.
В объектном мире есть понятие наследования, где транспортное средство может иметь несколько различных подклассов, поэтому автомобиль — это тип транспортного средства, лодка — это тип транспортного средства, а спортивная машина — это тип автомобиля, эти типы наследственные отношения.
В реляционном мире нет этого понятия наследования.
картографирование
Итак, как мы сопоставляем все эти непересекающиеся отношения? Эта концепция отображения происходит от объектно-реляционного картографа. Есть в основном три вещи, чтобы понять, как показано на следующей диаграмме.
-
В вашем приложении вам понадобятся определения классов, которые обычно представляют собой код C # и его код .NET, представляющий наши классы, такие как класс Employee, класс Customer, класс Order и т. Д.
-
Внизу вы можете увидеть схему базы данных, которая является нашим языком определения данных, в реляционной базе данных, которая определяет, как выглядит таблица клиента, как выглядит таблица сотрудника.
-
Между ними у нас есть метаданные отображения, которые говорят объектно-реляционному преобразователю, как переводить из мира объектов в C # в мир баз данных в терминах строк и столбцов и отношений внешнего ключа.
-
Эти метаданные сопоставления могут быть представлены различными способами, и мы рассмотрим некоторые из этих различных способов, наиболее типичных для приложения NHibernate.
-
Он представлен файлами HBM (Hibernate Mapping) , которые являются файлами XML.
В вашем приложении вам понадобятся определения классов, которые обычно представляют собой код C # и его код .NET, представляющий наши классы, такие как класс Employee, класс Customer, класс Order и т. Д.
Внизу вы можете увидеть схему базы данных, которая является нашим языком определения данных, в реляционной базе данных, которая определяет, как выглядит таблица клиента, как выглядит таблица сотрудника.
Между ними у нас есть метаданные отображения, которые говорят объектно-реляционному преобразователю, как переводить из мира объектов в C # в мир баз данных в терминах строк и столбцов и отношений внешнего ключа.
Эти метаданные сопоставления могут быть представлены различными способами, и мы рассмотрим некоторые из этих различных способов, наиболее типичных для приложения NHibernate.
Он представлен файлами HBM (Hibernate Mapping) , которые являются файлами XML.
База данных поддерживается
NHibernate поддерживает широкий спектр различных баз данных. Любая существующая реляционная база данных может быть доступна в NHibernate.
SQL-сервер является основной поддерживаемой базой данных, это то, что большинство разработчиков используют во время разработки, возможно, это самая распространенная.
Это также очень хорошо работает с Oracle .
Он также поддерживает DB2, Firebird, MySQL, PostgreSQL, SQL Lite
Он также имеет драйверы ODBC и OLEDB .