如何在linq中检查转换后的sql查询到NHibernate?

时间:2009-12-14 02:33:04

标签: linq-to-nhibernate

我正在使用Linq来NHibernate。

我有以下测试用例:

[TestMethod]
[DeploymentItem("hibernate.cfg.xml")]
public void Category_Should_GetAllByLinq()
{
  // Arrange
  IRepository<Category> repo = new CategoryRepository();

  //Act
  IList<Category> list = repo.GetListByLinq();

  //Assert
  Assert.IsTrue(list.Count > 0);
}

我还在CategoryRepository类中有以下代码:

public IList<Category> GetListByLinq()
{
  ISession session = NHibernateHelper.OpenSession();

  // When following statement is executed, How to check converted real sql query?
  var query = from c in session.Linq<Category>()
                        select c;

  return query.ToList();
}

我的问题是,一旦linq执行nhibernate语句,如何检查实际转换的sql查询?任何方法?

我知道我可以使用SQL分析器,但是我想在测试用例中使用Mock对象,所以我不想在任何与数据库相关的方法中看到它。

3 个答案:

答案 0 :(得分:2)

您可以使用NHibernate Profiler执行此操作,有关如何设置编程集成的详细信息,请参阅此帖子: http://ayende.com/Blog/archive/2009/12/13/uumlberprof-new-feature-programmatic-integration.aspx

另一个选项,稍微复杂一点,就是收听NHibernate.SQL记录器并处理其结果。它为您提供了信息,但您需要进行一些解析,它不会为您提供会话信息

答案 1 :(得分:1)

好问题。

我认为断言生成SQL的最佳方法是使用IInterceptor并挂钩OnPrepareStatement

或者,如果您在调试期间只在“输出”窗口中看到SQL语句,则可以启用show_sql选项。

答案 2 :(得分:0)

你试过NHiberate Profiler吗?它应该是你正在寻找的。