В этой главе мы рассмотрим, как начать простой пример с использованием NHibernate. Мы будем создавать простое консольное приложение . Для создания консольного приложения мы будем использовать Visual Studio 2015, которая содержит все функции, необходимые для создания, протестировать приложение с помощью пакета NHibernate.
Ниже приведены шаги по созданию проекта с использованием шаблонов проектов, доступных в Visual Studio.
Шаг 1 — Откройте Visual Studio и выберите Файл → Создать → Пункт меню Проект.
Шаг 2 — Откроется новое диалоговое окно проекта.
Шаг 3 — На левой панели выберите Шаблоны → Visual C # → Windows.
Шаг 4 — На средней панели выберите Консольное приложение.
Шаг 5 — Введите имя проекта «NHibernateDemoApp» в поле «Имя» и нажмите «ОК» для продолжения.
Шаг 6. После создания проекта в Visual Studio вы увидите несколько файлов, отображаемых в окне обозревателя решений.
Поскольку вы знаете, что мы создали простой проект консольного приложения, теперь нам нужно включить пакет NHibernate в наш консольный проект.
Перейдите в меню Сервис и выберите Диспетчер пакетов NuGet → Консоль диспетчера пакетов, откроется окно Консоль диспетчера пакетов.
Укажите команду, показанную в приведенном выше окне консоли диспетчера пакетов, и нажмите клавишу ВВОД. Она загрузит все зависимости NHibernate и создаст ссылки на все необходимые сборки. После завершения установки вы увидите сообщение, как показано на следующем рисунке.
Теперь, когда мы добавили NHibernate, мы можем начать реализацию. Итак, мы собираемся начать с отображения очень простой таблицы с именем Student , у которой просто есть целочисленный первичный ключ с именем ID и столбцы FirstName и LastName.
Нам нужен класс для представления этого ученика, поэтому давайте создадим новый класс с именем Student, щелкнув правой кнопкой мыши по проекту в обозревателе решений и выбрав Add → Class, который откроет диалоговое окно Add New Item.
Введите Student.cs в поле имени, нажмите кнопку Добавить. В этом классе Student у нас должен быть наш целочисленный первичный ключ с именем ID, и нам нужно создать эту строку, поля FirstName и LastName, как показано в следующей полной реализации класса Student.
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace NHibernateDemoApp { class Student { public virtual int ID { get; set; } public virtual string LastName { get; set; } public virtual string FirstMidName { get; set; } } }
При работе с моделями в приложении NHibernate проще всего сделать все поля виртуальными. Так что это наша простая модель NHibernate, которую мы будем использовать и сопоставим ее с внутренней базой данных.
Теперь давайте перейдем к методу Main в классе Program и создадим новый объект конфигурации NHibernate.
Первое, что нам нужно предоставить — это строка подключения . Это строка подключения для конкретной базы данных, и самый простой способ найти строку подключения — это щелкнуть правой кнопкой мыши базу данных в проводнике объектов SQL Server и выбрать «Свойства».
Откроется окно свойств, прокрутите вниз, и вы увидите поле Строка подключения в окне свойств.
Скопируйте строку подключения и укажите в своем коде. Ниже приведена реализация метода Main, в котором нам нужна конфигурация для NHibernate.
using NHibernate.Cfg; using NHibernate.Dialect; using NHibernate.Driver; using System; using System.Linq; using System.Reflection; namespace NHibernateDemoApp { class Program { static void Main(string[] args) { var cfg = new Configuration(); String Data Source = asia13797\\sqlexpress; String Initial Catalog = NHibernateDemoDB; String Integrated Security = True; String Connect Timeout = 15; String Encrypt = False; String TrustServerCertificate = False; String ApplicationIntent = ReadWrite; String MultiSubnetFailover = False; cfg.DataBaseIntegration(x = > { x.ConnectionString = "Data Source + Initial Catalog + Integrated Security + Connect Timeout + Encrypt + TrustServerCertificate + ApplicationIntent + MultiSubnetFailover"; x.Driver<SqlClientDriver>(); x.Dialect<MsSql2008Dialect>(); }); cfg.AddAssembly(Assembly.GetExecutingAssembly()); var sefact = cfg.BuildSessionFactory(); using (var session = sefact.OpenSession()) { using (var tx = session.BeginTransaction()) { //perform database logic tx.Commit(); } Console.ReadLine(); } } } }
После строки подключения нам нужно предоставить драйвер, который является SQLClientDriver, а затем мы также должны указать ему диалект, какую версию SQL Server мы будем использовать MS SQL 2008.
Теперь NHibernate знает, как подключиться к базе данных. Другая вещь, которую нам нужно сделать, это предоставить список моделей, которые мы будем отображать.
Мы можем сделать это, добавив сборку, указав Assembly.GetExecutingAssembly, и именно здесь программа найдет файлы сопоставления. Файлы сопоставления сообщают NHibernate, как перейти от классов C # к таблицам базы данных.
SessionFactory компилирует все метаданные, необходимые для инициализации NHibernate. SessionFactory может использоваться для создания сеансов, которые примерно аналогичны соединениям с базой данных. Поэтому подходящий способ — использовать его в блоке using. Я могу сказать, что var session равно sessionFactory.OpenSession, и я хочу сделать это внутри своей транзакции.
Как только сеанс открыт, мы можем сказать сеансу начать новую транзакцию, и мы можем выполнить некоторую логику здесь. Так что выполните некоторую логику базы данных и, наконец, совершите эту транзакцию.