2013-02-07 3 views
2

J'essaie de créer un système de génération de rapports générique afin que je puisse ajouter des rapports à mon programme à la volée, plutôt que d'émettre une nouvelle version du programme chaque fois que je dois ajouter un rapport.
Actuellement, je l'ai en partie travailler;
Mon rapport personnalisé SQL est stocké dans une table, avec le nom du rapport. Le nom du rapport est utilisé pour les boutons sur lesquels l'utilisateur doit cliquer, quand il clique sur le bouton, je veux que le SQL s'exécute et soit lié à un gridview, donc c'est aussi générique que possible.Entity Framework Custom SQL Query renvoyant le type générique

Cela semble être là où les problèmes viennent cependant. Obtenir le SQL et l'exécuter est bien, mais le lier à un gridview semble impossible, je reçois seulement une colonne, appelée Column, qui affiche 1 row avec une valeur de System.Object.

Je pense que le problème est parce que je suis de retour des données de plusieurs tables, à savoir

SELECT c.CertificateName, e.EntityName, 
     ce.CertificateDate, ce.CertificateExpiry, ce.CertificateNumber 
FROM FCERTSTest.dbo.CertificateEntries ce 
INNER JOIN FCERTSTest.dbo.Certificates c 
ON c.CertificateID = ce.Certificate_ID 
INNER JOIN FCERTSTest.dbo.Entities e 
ON e.EntityID = ce.Entity_ID 
WHERE FirstNotificationSent = '1' 

J'utilise actuellement

using (DBContainer db = new DBContainer()) 
{ 
    grid.DataSource = db.Database.SqlQuery<dynamic>(SQLCommand).ToList(); 
} 

J'ai essayé de remplacer dynamic avec object et obtenir la même problème ... Je comprends que la meilleure solution serait d'avoir une classe personnalisée et de remplacer dynamic avec cette classe personnalisée, mais alors je perds les avantages d'être générique car un rapport différent peut ne pas retourner les mêmes résultats et j'aurais besoin d'une nouvelle classe faite sur commande ...

Répondre

5

Employez SqlDataAdapter et DataSet. EF ne fonctionne pas avec les "requêtes dynamiques" lorsque vous n'avez pas de type spécial pour l'ensemble de résultats.

+0

Ahh, merci. Je pensais que cela pourrait être le cas. J'ai fini par utiliser un 'SqlDataAdapter' comme un correctif temporaire. Je vais devoir le rendre plus permanent maintenant. Y a-t-il quelque part dans les documents EF qui explique/couvre le manque de support pour les requêtes dynamiques? – Trent

+0

[documentation] (http://msdn.microsoft.com/fr-fr/library/gg696545%28v=vs.103%29.aspx) ne parle que des types dont les propriétés correspondent aux colonnes du jeu de résultats. –