Je travaille sur EF avec C# et WPF comme frontal. J'ai besoin de fournir une interface utilisateur pour que l'utilisateur puisse créer sa propre requête et obtenir le résultat. L'interface utilisateur sera la liste des tables et la liste des colonnes à sélectionner (pas heureux avec l'interface utilisateur.Vous devez améliorer, mais de nouvelles mesures dans mon esprit). Donc, ma question est comment créer, fusionner (requête existante) et exécuter les requêtes.Comment faire pour exécuter des requêtes SQL sur EF?
Il existe un fournisseur Entity Client sql class, classe objectquery. J'ai utilisé ObjectQuery
string querystring = @"SELECT PrjDev FROM prjscenario";
ObjectQuery<PrjDev> prjdevquery = new ObjectQuery<PrjDev>(querystring, ptxobjcontext);
string cpmmandtext = prjdevquery.CommandText;
int prjdevnum = prjdevquery.Count();
Cela fonctionne. Mais quand je cours une requête complexe. Ça ne marche pas. Exemple de code:
string querystring = @"SELECT PrjDev FROM prjscenario WHERE PrjDev.PrjDevType = 10";
Erreur:
'PrjDevType' est pas un membre de « Transient.collection [Skm.Ptx.Data.Emf.PrjDev (Nullable = True, DefaultValue =)] '. Pour extraire une propriété d'un élément de collection , utilisez une sous-requête pour itérer sur la collection. Près de simples identifiant , ligne 1, colonne 45.
Toute idée, pourquoi il est bon pour une requête simple mais il ne fonctionne pas pour les requêtes complexes?
Merci à l'avance, N
Salut Thomas, je cherchais sur ExecuteStoreQuery et E SQL. Premier ExecuteStoreQuery me semble bon. Cela fonctionne parfaitement avec une requête simple. Mais quand je passe une requête complexe avec joindre sur trois tables. Il se brise par erreur comme Le lecteur de données est incompatible avec le 'Emf.PrjDevCable' spécifié. Un membre du type 'PrjDevID' n'a pas de colonne correspondante dans le lecteur de données portant le même nom. –
Il ne fonctionnera pas pour les types anonymes, uniquement pour les types nommés (car vous ne pouvez pas spécifier le type anonyme comme paramètre de type générique). La requête doit renvoyer les mêmes noms de colonne que dans votre modèle –
Merci. J'ai résolu le problème et suis venu ici pour répondre à votre message. J'ai fais la même chose. J'utilisais le nom de sélection, le type des jointures de table ... Maintenant j'utilise Select * From Table Join .... Sur une note courte, L2S Support les deux. Mais EMF fonctionne bien avec Select * .... Merci, N –