nHibernate在预期时不会抛出异常(在集合中调用Save on entity)?

时间:2011-04-26 20:41:26

标签: nhibernate

我刚刚开始使用nHibernate,并且某些行为有点令人不安,当您尝试执行某些操作时,如果您正确编码或者配置错误,它似乎不会抛出异常。

例如,我有一些代码:

        ISessionFactory sessions = SessionManager.SessionFactory;
        ISession session = sessions.OpenSession();
        ITransaction tx1 = null;
        tx1 = session.BeginTransaction();
        IList<BusinessUnit> businessUnits = session.QueryOver<BusinessUnit>().List();
        System.Diagnostics.Debug.WriteLine("Count: " + businessUnits.Count);
        businessUnits[0].Name += "z";
        session.Save(businessUnits[0]);
        if (tx1 != null) tx1.Commit();
        session.Close();

当我第一次编码时,我没有包含交易的用法:

tx1 = session.BeginTransaction();  
if (tx1 != null) tx1.Commit();

所以,显然,如果一个事务不存在,nHibernate不会(至少根据我的配置)自动创建一个。我想这哪个好。

但令我困扰的是,如果需要 的交易,并且您尝试执行Save()而不使用,那么为什么不抛出异常?

(到目前为止,我遇到了另一个类似的问题,我试图加载一个集合,但显然我的配置中的一些错误阻止了成功加载...所以代码执行,但没有异常表明出错了)。 / p>

是否有一些配置设置我在缺少异常的情况下缺失,或者一个人是否必须对所有内容进行单元测试,因为没有必要假设某些行为有效?

1 个答案:

答案 0 :(得分:0)

预先存在的对象上,Save()不会自动提交到数据库,在上面的示例中,它要求您调用:

Session.flush();

如果使用事务,则在事务上调用.Commit()然后调用flush()。

所以没有抛出异常的原因是因为缓存是设计的默认行为(如果程序员不知道那么他们就会非常困惑!!!)