2009-06-20 3 views
1

Fondamentalement, je chercherais à implémenter une méthode comme celle-ci.Existe-t-il un moyen générique de renvoyer tous les enregistrements d'une table avec Entity Framework?

IQueryAble GetQuery<T>(Entities db) ou Méthode d'extension Entities.GetQuery<T>()

De cette façon, vous pouvez faire des choses comme ça

public IQueryable<T> GetAll() 
{ 
return yourEntityClasses.GetQuery<T>(); 
} 

qui renverrait une SELECT * FROM expression de requête et de toute évidence à partir de là, vous pouvez faire des méthodes génériques addtional pour le tri, pagination, où les expressions, etc en plus de cela vous éviter de devoir répéter le code pour ces méthodes pour chaque table. Je sais que SubSonic3 fait un très bon travail, mais essayait de dupliquer certaines fonctionnalités dans un projet EntityFramework sur lequel je travaille. La seule chose que je vois dans EF est CreateQuery et ObjectQuery mais tous les deux exigent que vous passiez une chaîne de requête dans laquelle vous devriez connaître le nom de la table.

+1

S'il vous plaît préciser - voulez-vous dire EF ou LINQ to SQL? Vous indiquez EF, mais DataContext est LINQ-to-SQL! Dans le cas de LINQ-to-SQL, il s'agit simplement de retourner ctx.GetTable () –

+0

Désolé, je voulais dire EF - Je vais corriger la référence datacontext –

Répondre

2

Eh bien, il est possible d'obtenir la chaîne que vous devez mettre dans la méthode CreateQuery automatiquement. Il s'agit simplement de string.Format("[{0}]",entitySetName); Comment obtenez-vous le nom de l'ensemble d'entités, en supposant que vous n'utilisiez pas quelque chose appelé MEST, la plupart des gens ne le font pas, vous pouvez utiliser certaines fonctions que j'ai écrites en this Tip pour obtenir l'EntitySet pour T prénom.

Une fois que vous faites cela, il devrait être assez trivial pour vous d'écrire la méthode d'extension

à savoir

public static IQueryable<T> GetAll<T>(this ObjectContext context) 
{ 
    var wkspace = context.MetadataWorkspace; 
    EntitySet set = wkspace 
     .GetEntitySets(wkspace.GetCSpaceEntityType<T>()) 
     .Single(); 
    return context.CreateQuery<T>(string.Format("[{0}]",set.Name); 
} 

Voir la pointe ci-dessus pour les autres fonctions utilisées.

Hope this helps

Alex

+0

Merci, Alex. J'aurais utilisé typeof (T) .Name, et peut-être pas trouvé pourquoi pas pendant un petit moment. –

+0

John, cool, je suis heureux je pourrais aider –

+0

Yep cela fonctionne - merci –

Questions connexes