Учебники

NHibernate — Начало работы

В этой главе мы рассмотрим, как начать простой пример с использованием 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

Теперь, когда мы добавили NHibernate, мы можем начать реализацию. Итак, мы собираемся начать с отображения очень простой таблицы с именем Student , у которой просто есть целочисленный первичный ключ с именем ID и столбцы FirstName и LastName.

Добавить новый предмет

Нам нужен класс для представления этого ученика, поэтому давайте создадим новый класс с именем Student, щелкнув правой кнопкой мыши по проекту в обозревателе решений и выбрав Add → Class, который откроет диалоговое окно Add New Item.

Добавить новый предмет NHibernate

Введите 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 и выбрать «Свойства».

Обозреватель объектов 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, и я хочу сделать это внутри своей транзакции.

Как только сеанс открыт, мы можем сказать сеансу начать новую транзакцию, и мы можем выполнить некоторую логику здесь. Так что выполните некоторую логику базы данных и, наконец, совершите эту транзакцию.