Программа 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>