Как да работя с Fluent NHibernate в C #

ORM (обектни релационни картографи) опростяват достъпа до данни във вашето приложение, като ви позволяват да пишете код за извършване на CRUD (Създаване, четене, актуализиране и изтриване) операции. ORM рамките се използват отдавна за премахване на несъответствието на импеданса, което съществува между обекта и моделите на данни в приложение. По същество ORM ви позволяват да пишете код за извършване на CRUD операции, без необходимостта от директно взаимодействие с основния доставчик на база данни. По този начин използването на ORM ви помага да изолирате обектния модел на вашето приложение от модела на данни.

Защо плавно NHibernate?

NHibernate съхранява информацията за картографиране във формат XML във .hbm файлове - трябва да имате по един .hbm файл за всеки клас обект. Този .hbm файл се използва за картографиране на обектите в съответните таблици на базата данни. При използването на Fluent NHibernate вече не е необходимо да използвате тромавите .hbm.xml файлове, които трябва да използвате при работа с NHibernate.

Fluent NHibernate е статично компилираният, компилиран безопасен аналог на популярния ORM инструмент NHibernate, който може да се използва за създаване на картографиране между класовете POCO и механизма на NHibernate, без необходимостта от тромави XML файлове. Той осигурява Fluent API, а също така ви позволява да използвате LINQ, за да търсите данни върху двигателя на NHibernate. В следващите раздели ще обсъдим как можем да инсталираме Fluent NHibernate, да създадем модели, да картографираме тези модели или класове обекти и да използваме Fluent NHibernate за извършване на CRUD операции.

Приготвяме се да започнем

За да започнете да използвате Fluent NHibernate, изпълнете следните стъпки:

  1. Отворете IDE на Visual Studio 2015
  2. Кликнете върху Файл -> Нов -> Проект
  3. Създайте нов проект - за простота създайте приложение за Windows
  4. Посочете име за проекта
  5. Щракнете върху OK, за да запазите проекта

След като в Visual Studio е създаден проект, може да искате да инсталирате Fluent NHibernate, за да го използвате във вашето приложение. Ако имате инсталиран NuGet, най-лесният вариант е да инсталирате Fluent NHibernate чрез NuGet Package Manager. За целта изберете проекта в прозореца на Solution Explorer, щракнете с десния бутон и изберете опцията „Управление на NuGet пакети ...“, за да инсталирате Fluent NHibernate framework от NuGet.

Работа с Fluent NHibernate

За да работите с Fluent NHibernate, първо трябва да създадете клас на модел. Обмислете следната таблица на базата данни.

CREATE TABLE [dbo].[Product]

(

   [Id] INT NOT NULL PRIMARY KEY,

   [Name] VARCHAR(50) NULL,

   [Description] VARCHAR(50) NULL

)

Ето съответния клас модел.

public class Product

   {

       public virtual int Id { get; set; }

       public virtual string Name { get; set; }

       public virtual string Description { get; set; }

   }

След като таблицата на базата данни и съответният клас модел са готови, следващата стъпка е да се създаде необходимото картографиране. За да картографирате обект във Fluent NHibernate, трябва да имате съответстващ клас на картографиране. Такива класове за картографиране трябва да произлизат от ClassMap, където T представлява обекта, който използвате. Fluent NHibernate използва силно типизирани класове C #, за да картографира свойствата на класовете на модела към съответните полета на таблиците на базата данни.

Ето класа на картографиране на име ProductMap.

public class ProductMap : ClassMap

   {

       public ProductMap()

       {

           Id(x => x.Id);

           Map(x => x.Name);

           Map(x => x.Description);

           Table("Product");

       }

   }

Следващата стъпка е да създадем помощен клас, който да се свърже с нашата база данни. Ето как би изглеждал този клас:

public static class FluentNHibernateHelper

   {

       public static ISession OpenSession()

       {

string connectionString = "Write your database connection string here";

           ISessionFactory sessionFactory = Fluently.Configure()

               .Database(MsSqlConfiguration.MsSql2012

                 .ConnectionString(connectionString).ShowSql()

               )

               .Mappings(m =>

                         m.FluentMappings

                             .AddFromAssemblyOf())

               .ExposeConfiguration(cfg => new SchemaExport(cfg)

                .Create(false, false))

               .BuildSessionFactory();

           return sessionFactory.OpenSession();

       }

   }

Обърнете внимание на извикването към sessionFactory.OpenSession () в последния оператор - това обаждане всъщност създава сесия на комуникация с основната база данни, т.е. отваря връзка с използваната база данни. Вече можете да извикате статичния метод FluentNHibernateHelper.OpenSession (), за да отворите връзка към базата данни. Следният кодов фрагмент илюстрира как можете да се възползвате от помощния клас, създаден по-рано, за да добавите запис на продукт към таблицата на базата данни на продукта.

static void Main(string[] args)

       {

           using (var session = FluentNHibernateHelper.OpenSession())

           {

               var product = new Product { Name = "Lenovo Laptop", Description = "Sample product" };

               session.SaveOrUpdate(product);

           }

       }

Следният кодов фрагмент показва как можете да заявявате данни от базата данни, като използвате нашия помощен клас Fluent NHibernate.

using (ISession session = FluentNHibernateHelper.OpenSession())

           {

               var products = session.Query().ToList();

               //Usual code

           }

За да работите с примерите за кодове, дадени в тази статия, трябва да се уверите, че следните пространства от имена са добавени към вашия клас.

  • използвайки FluentNHibernate.Cfg;
  • използвайки FluentNHibernate.Cfg.Db;
  • използване на NHibernate;
  • използване на NHibernate.Linq;
  • използване на NHibernate.Tool.hbm2ddl;
  • използване на System.Linq;

Можете да научите повече за работата с Fluent NHibernate от GitHub.