J'utilise de mon FindOne
surcharge et FindAll
dépôt appelle à réaliser this..something comme:
Function FindOne(ByVal spec As ILinqSpecification(Of T)) As T
Function FindOne(ByVal spec As ILinqSpecification(Of T), ByVal strategy As IFetchingStrategy(Of T)) As T
Function FindAll(ByVal spec As ILinqSpecification(Of T)) As IQueryable(Of T)
Function FindAll(ByVal spec As ILinqSpecification(Of T), ByVal strategy As IFetchingStrategy(Of T)) As IQueryable(Of T)
etc ..
Peut-être pas la plus propre approche, mais ça fait le boulot. Je ne suis pas certain que ce soit toujours un problème avec le fournisseur linq du trunk ou non, mais je peux également décider d'appliquer ou non le transformateur de résultat distinct à mes résultats dans les scénarios FindAll
selon que ma stratégie de récupération contient ou non collection. Mes implémentations de spécification et de stratégie de récupération sont basées sur celles disponibles dans le projet ncommon.
Pour référence, toute mon interface générique de référentiel « en lecture seule » est la suivante:
Public Interface IReadOnlyRepositoryWithTypedId(Of T As IEntityWithTypedId(Of IdT), IdT)
Function LoadById(ByVal id As IdT) As T
Function GetById(ByVal id As IdT) As T
Function FindOne(ByVal spec As ILinqSpecification(Of T)) As T
Function FindOne(ByVal spec As ILinqSpecification(Of T), ByVal strategy As IFetchingStrategy(Of T)) As T
Function GetCount() As Integer
Function GetCount(ByVal spec As ILinqSpecification(Of T)) As Integer
Function HasAny(ByVal spec As ILinqSpecification(Of T)) As Boolean
Function FindAll(ByVal spec As ILinqSpecification(Of T)) As IQueryable(Of T)
Function FindAll(ByVal spec As ILinqSpecification(Of T), ByVal strategy As IFetchingStrategy(Of T)) As IQueryable(Of T)
Function FindAll() As IQueryable(Of T)
Function FindAll(ByVal strategy As IFetchingStrategy(Of T)) As IQueryable(Of T)
End Interface
Utilisez-vous LinqSpecs? Pourriez-vous poster la signature complète de ces méthodes? –
@Ben - J'ai mis à jour ma réponse en conséquence, faites-moi savoir si vous avez besoin de plus de détails. – DanP
Une autre approche alternative que vous pourriez envisager: http://fabiomaulo.blogspot.com/2010/07/enhanced-query-object.html Je suis intéressé à essayer ce concept dans de futurs projets. – DanP