NHibernate “пустой идентификатор” исключение после вставки объекта

Следующий код вернет 10 последних записей.

@feed = @feed.sort! { |a,b| b.created_at <=> a.created_at }.take(10)

Ссылка на массив

5
задан gilles27 15 June 2009 в 18:07
поделиться

4 ответа

Сохранение и удаление должны происходить в транзакции, и транзакция должна быть зафиксирована в конце.

вот так:

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();
    }
}

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

Кроме того, не могли бы вы уточнить, где происходит исключение? Похоже, вы сохраняете родителя, а потом бросает потомок, потому что идентификатор родителя равен нулю? Или это на самом деле бросание на спасение родителя?

8
ответ дан 14 December 2019 в 08:58
поделиться

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

При этом, я думаю, вы действительно хотите это сделать ...

<id name="Id" column="Id" unsaved-value="0">
   <generator class="identity"/>  
</id>
0
ответ дан 14 December 2019 в 08:58
поделиться

я думаю вместо генератора class = "identity" />

попробуйте generator class = "guid.comp"

-2
ответ дан 14 December 2019 в 08:58
поделиться

Возможно, будет полезно настроить log4net, чтобы вы могли регистрировать и просматривать действия, которые выполняет NHibernate ...

Однажды у меня была проблема с NHibernate, использующая Access, и я смог решить ее, настроив ведение журнала, чтобы я мог точно определить причину проблемы.

Сообщение об ошибке, которое я получил, отличалось от вашего, но эта - статья, в которой я описываю, как я решил свою проблему. Возможно, вам это будет полезно. :)

1
ответ дан 14 December 2019 в 08:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: