Следующий код вернет 10 последних записей.
@feed = @feed.sort! { |a,b| b.created_at <=> a.created_at }.take(10)
Сохранение и удаление должны происходить в транзакции, и транзакция должна быть зафиксирована в конце.
вот так:
public void Save(IEnumerable<T> toSave)
{
using (ISession session = SessionFactory.OpenSession())
{
ITransaction transaction = Session.BeginTransaction();
foreach (T item in toSave)
{
session.SaveOrUpdate(item);
}
transaction.Commit();
session.Flush();
}
}
обратите внимание: вы захотите обернуть это в использование и правильный откат ... Кроме того, размещение того места, где вы открываете и фиксируете транзакцию, будет иметь значение в зависимости от вашего сценария. Вы также должны закрыть транзакцию, когда закончите ...
Кроме того, не могли бы вы уточнить, где происходит исключение? Похоже, вы сохраняете родителя, а потом бросает потомок, потому что идентификатор родителя равен нулю? Или это на самом деле бросание на спасение родителя?
Разработчики NHibernate не одобряют идентификацию. Основная проблема, с которой мы столкнулись, заключается в том, что пока вы не выполните промывку, вы не получите идентификатор. В вашем случае HiLo будет хорошей заменой.
При этом, я думаю, вы действительно хотите это сделать ...
<id name="Id" column="Id" unsaved-value="0">
<generator class="identity"/>
</id>
я думаю вместо генератора class = "identity" />
попробуйте generator class = "guid.comp"
Возможно, будет полезно настроить log4net, чтобы вы могли регистрировать и просматривать действия, которые выполняет NHibernate ...
Однажды у меня была проблема с NHibernate, использующая Access, и я смог решить ее, настроив ведение журнала, чтобы я мог точно определить причину проблемы.
Сообщение об ошибке, которое я получил, отличалось от вашего, но эта - статья, в которой я описываю, как я решил свою проблему. Возможно, вам это будет полезно. :)