Статьи

Работа CRUD с ASP.NET MVC и Fluent Nhibernate

До этого я написал пост о начале работы с  операциями Nhibernate и ASP.NET MVC –CRUD . Это один из самых популярных постов в моем блоге. Я получаю много вопросов по электронной почте и другим источникам, почему вы не пишете пост о Fluent Nhibernate и ASP.NET MVC. Поэтому я подумал, что будет хорошей идеей написать сообщение в блоге об этом.

Что такое беглый Nhibernate:

Конвекция над конфигурацией, которая является мантрой Fluent Hibernate Если вы увидели мой пост в блоге о Nhibernate, то вы, возможно, обнаружили, что нам нужно создать отображение xml на таблицу сопоставлений. Fluent Nhibernate использует сопоставление POCO вместо сопоставления XML, и я твердо верю в конвекцию поверх конфигурации, поэтому мне очень нравится Fluent Nhibernate. Но это вопрос личного теста, и нет веских аргументов в пользу того, что вы должны использовать Fluent Nhibernate вместо Nhibernate.

Свободно владеет Nhibernate — это команда, в которую входят Джеймс Грегори, Пол Батум, Эндрю Стюарт и Хадсон Акридж. Есть много коммиттеров, и это проект с открытым исходным кодом.

Вы можете найти более подробную информацию о на следующем сайте.

http://www.fluentnhibernate.org/

На этом сайте вы можете найти определение Fluent Nhibernate, как показано ниже.


Свободные, без XML, безопасные, автоматизированные, основанные на соглашениях сопоставления для NHibernate.
Получите свободное владение.

У них есть отличное руководство по началу работы по следующему URL. Вы можете легко пройти через это и выучить это.
https://github.com/jagregory/fluent-nhibernate/wiki/Getting-started

ASP.NET MVC и свободный Nhibernate:

Итак, все готово, пришло время написать пример приложения. Итак, из Visual Studio 2013 перейдите к файлу — Новый проект и добавьте новый проект веб-приложения с ASP.NET MVC. Как только вы закончите создание веб-проекта с ASP.NET MVC, пришло время добавить Fluent Nhibernate в приложение. Вы можете добавить Fluent Nhibernate в приложение через следующий пакет NuGet. И вы можете установить его с помощью консоли диспетчера пакетов, как показано ниже. Теперь мы закончили с добавлением Fluent Nhibernate, пришло время добавить новую базу данных. Теперь я собираюсь создать простую таблицу с именем «Сотрудник» с четырьмя столбцами Id, FirstName, LastName и Designation. Ниже приведен сценарий для этого.

свободно-NHibernate создать-проект

NuGet-пакет в обмен на свободно-NHibernate

NuGet-пакет-менеджер добавляющие-свободно-NHibernate

свободно-NHibernate-база

CREATE TABLE [dbo].[Employee]
(
    [Id] INT NOT NULL PRIMARY KEY, 
    [FirstName] NVARCHAR(50) NULL, 
    [LastName] NVARCHAR(50) NULL, 
    [Designation] NVARCHAR(50) NULL
)

Теперь таблица готова, пришло время создать класс Model для Employee. Ниже приведен код для этого.

namespace FluentNhibernateMVC.Models
{
    public class Employee
    {
        public virtual int EmployeeId { get; set; }
        public virtual string FirstName { get; set; }
        public virtual string LastName { get; set; }
        public virtual string  Designation{ get; set; }
    }
}

Теперь, когда мы закончили с нашими модельными классами и другими вещами, пришло время создать класс Map, который сопоставит наш класс модели с нашей таблицей базы данных, поскольку мы знаем, что Fluent Nhibernate использует классы POCO для сопоставления вместо сопоставлений xml. Ниже приведен класс карты для этого.

using FluentNHibernate.Mapping;
 
namespace FluentNhibernateMVC.Models
{
    public class EmployeeMap : ClassMap<Employee>
    {
        public EmployeeMap()
        {
            Id(x => x.EmployeeId);
            Map(x => x.FirstName);
            Map(x => x.LastName);
            Map(x => x.Designation);
            Table("Employee");
        }
    }
}

Если вы внимательно посмотрите на класс Employee Map, вы увидите, что я сопоставил столбец Id с EmployeeId в таблице и другие вещи, которые вы можете видеть, я написал таблицу с «Employee», которая отобразит класс Employee в класс сотрудника.

Теперь, когда мы закончили с нашим классом отображения, пришло время добавить Nhibernate Helper, который будет подключаться к базе данных SQL Server.

using FluentNHibernate.Cfg;
using FluentNHibernate.Cfg.Db;
using NHibernate;
using NHibernate.Tool.hbm2ddl;
 
namespace FluentNhibernateMVC.Models
{
    public class NHibernateHelper
    {
        public static ISession OpenSession()
        {
            ISessionFactory sessionFactory = Fluently.Configure()
                .Database(MsSqlConfiguration.MsSql2008
                  .ConnectionString(@"Data Source=(LocalDB)\v11.0;AttachDbFilename=C:\data\Blog\Samples\FluentNhibernateMVC\FluentNhibernateMVC\FluentNhibernateMVC\App_Data\FNhibernateDemo.mdf;Integrated Security=True") 
                              .ShowSql()
                )
               .Mappings(m =>
                          m.FluentMappings
                              .AddFromAssemblyOf<Employee>())
                .ExposeConfiguration(cfg => new SchemaExport(cfg)
                                                .Create(false, false))
                .BuildSessionFactory();
            return sessionFactory.OpenSession();
        }
    }
}

Теперь мы закончили с классами. Пришло время подготовить наш Контроллер для приложения. Щелкните правой кнопкой мыши папку «Контроллер» и нажмите «Добавить новый контроллер». Он попросит элементы лесов, такие как следующие. Я выбрал контроллер MVC5 с действием чтения / записи. Как только вы нажмете кнопку «Добавить», будет запрошено имя контроллера. Теперь наш контроллер готов. Пришло время написать код для наших действий.  Листинг: Ниже приведен код нашего действия по листингу.

подмости-работник-fluenthibernate

дополнительный контроллер-сотрудник


public ActionResult Index()
{
    using (ISession session = NHibernateHelper.OpenSession())
    {
        var employees = session.Query<Employee>().ToList();
        return View(employees);
    }
}

Вы добавляете вид для листинга через правый клик на View и Add View Вот и все, что вы сделали с перечислением вашей базы данных. Я добавил несколько записей в таблицу базы данных, чтобы увидеть, работает ли она или нет. Ниже приведен результат, как и ожидалось Создать: теперь пришло время создать код и представления для создания Сотрудника. Ниже приведен код для результатов действий.

надстройку вид Перечня-свободно-NHibernate

Список-работник-fluentnhibernate


public ActionResult Create()
{
    return View();
}
 
// POST: Employee/Create
[HttpPost]
public ActionResult Create(Employee employee)
{
    try
    {
        using (ISession session = NHibernateHelper.OpenSession())
        {
            using (ITransaction transaction = session.BeginTransaction())
            {
                session.Save(employee);
                transaction.Commit();
            }
        }
 
        return RedirectToAction("Index");
    }
    catch (Exception exception)
    {
        return View();
    }
}

Здесь вы можете увидеть один if для пустого действия, а другой — для публикации данных и сохранения на SQL Server с атрибутом HttpPost. Вы можете добавить представление для создания, щелкнув правой кнопкой мыши на представлении результата действия, как показано ниже. Теперь, когда вы запустите это, вы получите результат, как и ожидалось. После того, как вы нажмете «Создать», он вернется обратно к списку, как этот. Изменить: Теперь мы закончили с перечислением / добавлением сотрудника, пришло время написать код для редактирования / обновления сотрудника. Ниже приведен код метода действий.

создать-работник-свободно-NHibernate

создание-работник-свободно-NHibernate

создание-работник-свободно-nhibernate2


public ActionResult Edit(int id)
{
    using (ISession session = NHibernateHelper.OpenSession())
    {
        var employee = session.Get<Employee>(id);
        return View(employee);
    }
}
 
// POST: Employee/Edit/5
[HttpPost]
public ActionResult Edit(int id, Employee employee)
{
    try
    {
        using (ISession session = NHibernateHelper.OpenSession())
        {
            var employeetoUpdate = session.Get<Employee>(id);
 
            employeetoUpdate.Designation = employee.Designation;
            employeetoUpdate.FirstName = employee.FirstName;
            employeetoUpdate.LastName = employee.LastName;
 
            using (ITransaction transaction = session.BeginTransaction())
            {
                session.Save(employeetoUpdate);
                transaction.Commit();
            }
        }
        return RedirectToAction("Index");
    }
    catch
    {
        return View();
    }
}

Вы можете создать редактируемый вид с помощью правого клика на представлении. Теперь при запуске приложения оно будет работать как положено. Детали: Вы можете написать код детали, как показано ниже.

редактировать-работник-свободно-NHibernate

редактирование-сотрудник-свободно-NHibernate


public ActionResult Details(int id)
{
    using (ISession session = NHibernateHelper.OpenSession())
    {
        var employee = session.Get<Employee>(id);
        return View(employee);
    }
}

Вы можете просмотреть, щелкнув правой кнопкой мыши на вид, как показано ниже. Теперь, когда вы запускаете приложение, вы получаете следующий ожидаемый результат. Удалить: Ниже приведен код для удаления сотрудника одним методом действия для подтверждения удаления и другим для удаления данных из таблицы сотрудников.

Подробности-работник-fluentnhibernate

детализация ракурса-работник-свободно-NHibernate


public ActionResult Delete(int id)
{
    using (ISession session = NHibernateHelper.OpenSession())
    {
        var employee = session.Get<Employee>(id);
        return View(employee);
    }
}
 
[HttpPost]
public ActionResult Delete(int id, Employee employee)
{
    try
    {
        using (ISession session = NHibernateHelper.OpenSession())
        {
            using (ITransaction transaction = session.BeginTransaction())
            {
                session.Delete(employee);
                transaction.Commit();
            }
        }
        return RedirectToAction("Index");
    }
    catch (Exception exception)
    {
        return View();
    }
}

Вы можете добавить представление для удаления, щелкнув правой кнопкой мыши на представлении, как показано ниже. Когда вы бежите, он работает, как ожидалось. Как только вы нажмете на удаление, он будет удалять сотрудника. Вот и все. Вы можете видеть, что это очень легко. Fluent Nhibernate поддерживает отображение POCO без написания каких-либо сложных отображений XML. Вы можете найти весь исходный код на GitHub в следующем месте. https://github.com/dotnetjalps/FluentNhiberNateMVC Надеюсь, вам понравится. Оставайтесь с нами, чтобы узнать больше!

удаление-сотрудник-MVC-свободно-NHibernate

удаление-сотрудник-MVC-свободно-NHibernate-Asp-нетто