Я нашел то, что я считал great article от Ayende, при создании простого базового испытательного прибора для тестирования модулей NHib с использованием SQLite.Блок-схема блока NHibernate 101
Мой вопрос здесь - это код для испытательного образца в бетонном крепеже. В EX_1 ниже Айенде обертывает и сохранение выборки в транзакции, которую он совершает, и имеет Session.Clear между ними. Это работает, или курс, но также EX_2.
Все, что мне нравится, предпочитаю более компактный, читаемый EX_2. Любые мысли о том, почему дополнительный код в EX_1 стоит немного беспорядка?
Приветствия,
Berryl
==== EX_1 =====
[Fact]
public void CanSaveAndLoadBlog_EX_1()
{
object id;
using (var tx = session.BeginTransaction())
{
id = session.Save(new Blog
{
AllowsComments = true,
CreatedAt = new DateTime(2000,1,1),
Subtitle = "Hello",
Title = "World",
});
tx.Commit();
}
session.Clear();
using (var tx = session.BeginTransaction())
{
var blog = session.Get<Blog>(id);
Assert.Equal(new DateTime(2000, 1, 1), blog.CreatedAt);
Assert.Equal("Hello", blog.Subtitle);
Assert.Equal("World", blog.Title);
Assert.True(blog.AllowsComments);
tx.Commit();
}
}
==== EX_2 =====
[Fact]
public void CanSaveAndLoadBlog_EX_2()
{
var id = session.Save(new Blog
{
AllowsComments = true,
CreatedAt = new DateTime(2000, 1, 1),
Subtitle = "Hello",
Title = "World",
});
var fromDb = session.Get<Blog>(id);
Assert.Equal(new DateTime(2000, 1, 1), fromDb.CreatedAt);
Assert.Equal("Hello", fromDb.Subtitle);
Assert.Equal("World", fromDb.Title);
Assert.True(fromDb.AllowsComments);
}
@ Emmanuel - Я не знал, что всегда используют транзакции для операций чтения с Hibernate. Спасибо, что указали это. Глава 11.2 документов, похоже, подтверждает это также (http://docs.jboss.org/hibernate/core/3.3/reference/en/html/transactions.html) «Всегда используйте четкие границы транзакций даже для чтения операции «. – dcp