【问题标题】:database inspection while debugging调试时检查数据库
【发布时间】:2009-07-06 03:45:03
【问题描述】:

我正在尝试使用 nhibernate 映射的一些级联选项,并进行单元测试,我想在其中使用工具来检查数据库的状态。我希望我可以使用 linqpad 来执行此操作,但是在调试器中连接似乎挂起。不久前我看过一个演示,其中在调试期间使用 SSMS 来检查数据库,所以我想知道我是否应该能够以某种方式使用 linqpad 或者我是否需要其他工具(我还没有安装SSMS 在我的笔记本电脑上,更喜欢重量更轻的东西)。

与 linqpad 无关,我这样做的动机是我不确定我在单元测试中验证的数据库状态是来自数据库还是来自 nhibernate 的缓存?如果在断言之前调用了 Session.Flush(),这是否意味着断言中的 fetch 保证来自数据库?

干杯, 浆果

【问题讨论】:

    标签: c# unit-testing nhibernate ssms linqpad


    【解决方案1】:

    对于您问题的第二部分 - 是的,在任何类型的 fetch 之前调用 session.flush() 都会将所有内容推送到数据库。你也可以这样做:

    Transaction t = session.beginTransaction();
    //some hibernate interaction test code
    t.commit()
    //you can rest assured that any code coming from the hibernate now will
    //be exactly what is in the db.
    

    希望有帮助。

    【讨论】:

      【解决方案2】:

      SQL Profiler(来自 SSMS 的工具 > SQL Server Profile)或NHProf 将帮助您监控发送到数据库的命令。

      【讨论】:

      • 嗨 Jamie 我现在可以看到发送到数据库的 sql 语句,只需配置 NHib 将它们发送到控制台。它很有用,但我正在寻找一个可以在调试期间检查数据库数据的轻量级工具。干杯,
      【解决方案3】:

      您可以使用 HSQLDB 中包含的 DatabaseManagerSwing 类,它会打开一个 Swing 应用程序,允许您浏览数据库中的对象并运行查询。将打开的连接传递给它可以让您在连接所在的事务中查看数据库的状态。

      DatabaseManagerSwing manager = new DatabaseManagerSwing();
      manager.main();
      manager.connect(connection);
      manager.start();
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-05-22
        • 2011-05-07
        • 1970-01-01
        • 2011-01-25
        • 1970-01-01
        相关资源
        最近更新 更多