Перехватчик NHibernate, контролирующий идентификатор вставленного объекта

В рельсах 4

Student.
  find_or_initialize_by(:user_id => current_user.id).
  update_attributes!(:department => 1)
5
задан Linger 4 September 2012 в 18:53
поделиться

2 ответа

Я решил эту проблему, добавление списка в мой класс перехватчика, который заполняется объектами во время реализации OnSave .

В реализации PostFlush список повторяется, и каждый элемент проверяется как вставка. Объекты в этом списке сохранены в PostFlush () и, таким образом, сгенерированы идентификаторы.

Кажется, это работает нормально, но я был бы признателен, если бы были указаны какие-либо потенциальные ловушки: -)

public class AuditInterceptor : EmptyInterceptor
{       
    // To hold inserted items to be audited after insert has been flushed
    private IList<object> insertItems = new List<object>();

    public override void PostFlush(System.Collections.ICollection entities)
    {            
        foreach (var entity in insertItems)
        {
            AddAuditItem(entity, INSERT);
        }
        insertItems.Clear();

        base.PostFlush(entities);
    }

    public override bool OnSave(object entity, object id, object[] state, 
        string[] propertyNames, IType[] types)
    {            
        var auditable = entity as IAuditable;
        if (auditable != null) 
            insertItems.Add(entity);

        return false;            
    }
}
9
ответ дан 14 December 2019 в 01:16
поделиться

попробуйте метод OnFlushDirty .. или, может быть, PostFlush

edit: также, можете ли вы опубликовать свой код? Разве вы не получаете идентификатор в качестве параметра на OnSave ?

0
ответ дан 14 December 2019 в 01:16
поделиться
Другие вопросы по тегам:

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