nhibernate - 不会导致 "collection was not processed by flush"错误的NHibernate审核跟踪

标签 nhibernate

Ayende上有一篇有关如何使用事件处理程序为NHibernate(here)实现简单审核跟踪的文章。

不幸的是,从注释中可以看出,他的实现导致引发以下异常:collection(XXX)没有由flush()处理。

问题似乎是对脏属性上的ToString的隐式调用,如果脏属性也是映射实体,则可能导致麻烦。

我尽了最大的努力来构建一个可行的实现,但是没有运气。

有人知道可行的解决方案吗?

最佳答案

我可以使用以下解决方法解决相同的问题:在监听器中的当前持久性上下文中,将所有集合上的已处理标志设置为true

public void OnPostUpdate(PostUpdateEvent postEvent)
{
    if (IsAuditable(postEvent.Entity))
    {
       //skip application specific code

        foreach (var collection in postEvent.Session.PersistenceContext.CollectionEntries.Values)
        {
            var collectionEntry = collection as CollectionEntry;
            collectionEntry.IsProcessed = true;
        }

        //var session = postEvent.Session.GetSession(EntityMode.Poco);
        //session.Save(auditTrailEntry);
        //session.Flush();
    }
}

希望这可以帮助。

关于nhibernate - 不会导致 "collection was not processed by flush"错误的NHibernate审核跟踪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3090733/

相关文章:

asp.net-mvc - 如何在 ASP.NET MVC 应用程序中处置 NHibernate ISession

c# - Entity Framework 中的 NHibernate 的 SchemaUpdate(代码优先)?

asp.net-mvc - Fluent NHibernate 获取已保存对象的 ID

nhibernate - 如何在 NHibernate 中映射没有标识列的 View ?

C#:构造函数中的奇怪引用的行为类似于 "virtual field"

NHibernate 多对多,关联表上带有 bool 标志

wcf - 从 n 层客户端遍历对象图

sql-server - 如何调试缓慢的 NHibernate Select 查询?

nhibernate - hibernate.default_schema 是什么意思?

c# - 在属性中声明变量是否被认为是不好的做法?