Come controllare domanda di sql convertita in LINQ to NHibernate?
-
19-09-2019 - |
Domanda
Sto usando LINQ to NHibernate.
Ho un seguente caso di test:
[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);
}
e anche io ho seguente codice nella classe 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();
}
La mia domanda è che una volta che LINQ to NHibernate dichiarazione viene eseguita, come controllare query SQL vero convertito? qualsiasi metodo?
So che posso utilizzare SQL Profiler, però mi piacerebbe utilizzare oggetto Mock in caso di test in modo da non voglio vederlo in qualsiasi metodo relativi database.
Soluzione
Buona domanda.
Credo che il modo migliore per affermare l'SQL generato sarebbe quella di utilizzare IInterceptor e agganciarsi OnPrepareStatement .
Se è ok per voi a vedere solo le istruzioni SQL nella finestra di output durante il debug si può semplicemente abilitare show_sql opzione.
Altri suggerimenti
È possibile utilizzare il NHibernate Profiler per farlo, vedere questo post per i dettagli su come impostare l'integrazione programmatica: http://ayende.com/ blog / archive / 2009/12/13 / uumlberprof-new-funzione-programmatico-integration.aspx
Un'altra opzione, un po 'più complicato, è quello di ascoltare il registratore NHibernate.SQL ed elaborare i suoi risultati. Ti dà le informazioni, ma avrebbe bisogno di un po 'di analisi e non vi darà le informazioni sessioni
Hai provato NHiberate Profiler ? Dovrebbe essere quello che stai cercando.