Tout d'abord, j'utilise Fluent NHibernate avec LinqToNHibernate.NHibernate suspendu sur requête paresseuse
J'ai une requête pour faire une recherche sur une table en fonction des données entrées par l'utilisateur. Ainsi, par exemple, je fais quelque chose comme ceci: Alors
'build the initial query that we will filter--this is lazy loaded
Dim results As IEnumerable(Of Customers) = Me.GetCustomers()
'filter by owner name
If String.IsNullOrEmpty(OwnerName) = False Then
results = results.Where(Function(s) s.Name.Contains(OwnerName))
End If
'execute query
results = results.ToList()
essentiellement Je construis une déclaration sur laquelle l'instruction SQL si l'utilisateur veut effectuer une recherche par nom. J'utilise toutes les configurations paresseuses dans mes mappings, donc la requête ne devrait pas récupérer les éléments jusqu'à ce que le "ToList()" soit appelé. Le problème est que NHibernate se bloque sur cette déclaration. J'ai d'abord pensé que c'était parce qu'il y avait tellement de disques dans le db (environ 500 000).
Mais je changé la ligne où je filtrer les résultats à ceci:
results = SessionFactoryProvider.SessionFactory.CurrentSession.Linq(Of Customer).Where(Function(c) c.Name.Contains(OwnerName))
Et ça marche très rapidement. Mais je n'arrive pas à comprendre pourquoi. Des idées?
Merci; cela a fonctionné parfaitement :) Je pense que mon problème était mon type de retour étant IEnumerable sur la première ligne au lieu de IQueryable. Je saurai à l'avenir. – Austin