Статьи

Свободное владение Nhibernate: создание таблицы из кода (Class- CodeFirst)

С Fluent Nhibernate нам не нужно писать и поддерживать отображение в xml. Вы можете написать классы для сопоставления ваших доменных объектов с таблицами базы данных. Если вы хотите узнать, как мы можем сделать это с существующей базой данных и Fluent Nhibernate, я также написал сообщение в блоге о работе CRUD с Fluent Nhibernate и ASP.NET MVC.  После написания этого сообщения в блоге я получил много писем о как мы можем создать базу данных из Fluent Nhibernate, как мы можем сделать то же самое с Entity Framework Code First. Поэтому я подумал, что было бы неплохо написать сообщение об этом в блоге вместо того, чтобы писать отдельные электронные письма.

Как создать таблицы из класса через Fluent Nhibernate:

Чтобы продемонстрировать, как мы можем создавать классы отображения на основе таблиц, мы собираемся создать консольное приложение, добавив новый проект, как показано ниже.

консольное приложение свободно-NHibernate-кода первая

Как только вы закончили с созданием приложения. Пришло время добавить ссылку на Fluent Nhibernate. Вы можете сделать это через менеджер пакетов вашей библиотеки, как показано ниже.

добавление-пакет-свободно-NHibernate

Теперь, когда я добавил код Fluent Nhibernate, я создал простой класс «Клиент», как показано ниже.

namespace FluentNhibernateCodeFirst
{
    public class Customer
    {
        public virtual int CustomerId { get; set; }
        public virtual string FirstName { get; set; }
        public virtual string LastName { get; set; }
    } 
}

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

using FluentNHibernate.Mapping;

namespace FluentNhibernateCodeFirst
{
    public class CustomerMap : ClassMap<Customer>
    {
        public CustomerMap()
        {
            Id(c => c.CustomerId);
            Map(c => c.FirstName);
            Map(c => c.LastName);
        }
    }
}

Здесь я сопоставляю идентификатор Customer Id как идентификатор клиента, который будет первичным ключом. Теперь пришло время написать код для создания базы данных и сохранения некоторых данных в созданной таблице клиентов.

using System;
using System.Configuration;
using FluentNHibernate.Cfg;
using FluentNHibernate.Cfg.Db;
using NHibernate;
using NHibernate.Tool.hbm2ddl;

namespace FluentNhibernateCodeFirst
{
    class Program
    {
        private static ISessionFactory _sessionFactory;

        static void Main(string[] args)
        {
            //creating database 
            string connectionString = ConfigurationManager.ConnectionStrings["DefaultConnectionString"].ConnectionString;
            CreateDatabase(connectionString);
            Console.WriteLine("Database Created sucessfully");

            //creating a object of customer
            Customer customer=new Customer
            {
                CustomerId = 1,
                FirstName = "Jalpesh",
                LastName = "Vadgama"
            };

            //saving customer in database.
            using(ISession session = _sessionFactory.OpenSession())
                session.Save(customer);

            Console.WriteLine("Customer Saved");

        }

        static void CreateDatabase(string connectionString)
        {
            var configuration = Fluently.Configure()
                .Database(MsSqlConfiguration.MsSql2012.ConnectionString(connectionString).ShowSql)
                .Mappings(m => m.FluentMappings.AddFromAssemblyOf<CustomerMap>())
                .BuildConfiguration();

            var exporter = new SchemaExport(configuration);   
            exporter.Execute(true, true, false);

            _sessionFactory = configuration.BuildSessionFactory();  
        }
    }


}

Здесь, в приведенном выше коде, если вышеупомянутый код заботится полностью, я создал функцию CreateDatabase. В этой функции сначала создается сопоставление, а затем выполняется сопоставление схемы с базой данных для создания таблицы.

После создания таблицы я инициализировал объект customer и сохранил его в базе данных. Теперь, когда вы запускаете это приложение. Вы получите вывод, как показано ниже, как и ожидалось.

свободно-NHibernate-код-первых, NHibernate

И теперь, если вы видите базу данных в SQL Management Studio, таблица Customer будет создана, как показано ниже.

клиент-стол-сотворены свободно-NHibernate

И если вы видите эту таблицу, данные также вставляются, как показано ниже.

Данные вставленный-свободно-NHibernate

Вот и все. Надеюсь, вам понравится. Оставайтесь с нами, чтобы узнать больше!

You can find complete sourcecode of this example at github on —
https://github.com/dotnetjalps/FluentHinbernateCodeFirst