我刚刚开始使用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>
是否有一些配置设置我在缺少异常的情况下缺失,或者一个人是否必须对所有内容进行单元测试,因为没有必要假设某些行为有效?
答案 0 :(得分:0)
在预先存在的对象上,Save()不会自动提交到数据库,在上面的示例中,它要求您调用:
Session.flush();
如果使用事务,则在事务上调用.Commit()然后调用flush()。
所以没有抛出异常的原因是因为缓存是设计的默认行为(如果程序员不知道那么他们就会非常困惑!!!)