Программа Basic Fluent NHibernate компилируется и запускается, но из базы данных ничего не сохраняется и не загружается

Я пытаюсь очень простой пример Fluent Nhibernate: база данных SQL 2005 с одной таблицей, консольное приложение VS2008. Таблица имеет одну запись перед запуском программы.

Я пытаюсь добавить одну запись, а затем отобразить все записи из таблицы. Программы успешно компилируются и запускаются без каких-либо исключений, однако записи не отображаются. Файл отображения HBM также не создается. Похоже, что программа полностью игнорирует базу данных (хотя и подключается к ней).

Вот мой код - я старался сделать его минимальным:

Сущность:

namespace FluentNhibernationConsole.Entities
{
    public class Sorder
    {
        public virtual int Id { get; private set; }
        public virtual DateTime DateCreated { get; set; }

    }
}

Отображение:

namespace FluentNhibernationConsole.Mappings
{
    class SorderMap : ClassMap<Sorder>
    {
        public SorderMap()
        {
            Id(x => x.Id, "SorderId");
            Map(x => x.DateCreated);
        }
    }
}

Сама программа:

namespace FluentNhibernationConsole
{
    class Program
    {
         private static ISessionFactory CreateSessionFactory()
        {
            return Fluently.Configure()
                .Database(MsSqlConfiguration
                    .MsSql2005
                    .ShowSql()
                    .ConnectionString(@"server=.\sqlexpress;database=lsdb;Integrated Security=SSPI;")
                )
                .Mappings(m => m.FluentMappings.AddFromAssemblyOf<Program>()
                    .ExportTo(@"d:\temp\nh")
                )
                .BuildSessionFactory();
        }

        static void Main(string[] args)
        {
            var sessionFactory = CreateSessionFactory();
            using (var session = sessionFactory.OpenSession())
            {
                using (var transaction = session.BeginTransaction())
                {
                    var order1 = new Sorder {DateCreated = DateTime.Now};
                    transaction.Commit();
                }
                using (session.BeginTransaction())
                    foreach (var order in session.CreateCriteria(typeof(Sorder)).List<Sorder>())
                        Console.WriteLine("Order: " + order.DateCreated.ToLongTimeString());
            }
            Console.ReadKey();
        }

    }
}

1 ответ

Решение

Как вы уже заметили, вы забыли сохранить () вашу новую сущность.

using (var transaction = session.BeginTransaction())
{
    var order1 = new Sorder {DateCreated = DateTime.Now};
    session.Save( order1 );
    transaction.Commit();
}

И ваша ClassMap должна быть публичной

public class SorderMap : ClassMap<Sorder>
Другие вопросы по тегам