flush()没有处理NHibernate异常集合[..User.Groups]

时间:2010-01-06 20:24:56

标签: c# nhibernate exception

我的所有NH实体都来自一个名为BusinessEntity的类型 具有最基本的值ID,Created,CreatedBy,Updated,UpdatedBy。

CreatedBy / UpdatedBy需要用户

我有一个IPreUpdateEventListener和IPreInsertEventListener 获取审计值的当前DateTime。我也在这里 我通过运行一个来获取当前用户运行的逻辑 标准查询Windows用户原则。从我的角度来看 从我的用户类所需的关于这个主题的NH用户组的所有帖子中了解 急切地加载,以便在我的EventListeners中正常工作 这是我加载用户的方式

public User GetByDomainPrinciple(string domainPrinciple)
{
    var domainPrincipleCriteria = DetachedCriteria.For<User>()
        .Add(Restrictions.Eq("DomainPrinciple", domainPrinciple))
        .SetFetchMode("Roles", FetchMode.Eager)
        .SetFetchMode("Groups", FetchMode.Eager)
        .SetFetchMode("Groups.Roles", FetchMode.Eager)
        .SetCacheable(true);

    return Repository.QuerySingle(domainPrincipleCriteria);
}

Repository.QuerySingle(domainPrincipleCriteria);只是

return detachedCriteria
.GetExecutableCriteria(_conversation.Session).UniqueResult<T>();

我错过了什么或者我的标准查询错了吗?我猜绝对 最糟糕的情况我可以将CreatedBy改为Guid而不是 用户只需手动分配FK,但这看起来非常 脏。

2 个答案:

答案 0 :(得分:2)

NHibernate中存在一个可以使用自定义DefaultFlushEventListener修复的错误。在这里看到答案: https://stackoverflow.com/a/11575172/1389546

答案 1 :(得分:1)

我认为这可能会对你有所帮助。该错误源于PreUpdateEventListener。我回来时遇到了同样的问题。

http://ayende.com/Blog/archive/2009/04/29/nhibernate-ipreupdateeventlistener-amp-ipreinserteventlistener.aspx