J'exécute cette requête simple avec Entity Framework
db.Database.SqlQuery<string>("SELECT * FROM hospital");
Mais j'ai eu cette erreur:
Le lecteur de données a plusieurs champs. Les champs multiples ne sont pas valides pour les types de primitive ou d’énumération EDM.
Quel pourrait être le problème?
Il serait utile de voir à quoi ressemble la table d'hôpital, mais en supposant que quelque chose de simple ressemble à un hôpital comprenant HospitalId et HospitalName, vous avez le choix.
db.Database.SqlQuery<IEnumerable<string>>("SELECT hospitalName FROM hospital"); //would work if all you're trying to do is get the Name
db.Database.SqlQuery<MyEntity>("SELECT * FROM hospital"); //where you define MyEntity as the same structure as the table would work
db.Database.SqlQuery<IEnumerable<Tuple<int, string>>>("SELECT * FROM hospital"); // would theoretically work although I haven't tried it. Where the Tuple items would have to match the database types in order. I.e. if field 1 is an int and field 2 is a string then Tuple<int,string>
Fondamentalement, l'erreur est que le code ne sait pas comment insérer la chaîne dans la structure de l'hôpital
Cela a résolu mon problème, certains résultats ne fonctionnant pas comme prévu.
string storedProcedure = "Admin_AutoGenerateKeywordsFortblCompany @Company_ID=" + CompId;
var s= db.ExecuteStoreQuery<List<string>>("exec " + storedProcedure).ToList();
ici un ou plusieurs résultats peuvent être pris
Vous pouvez également obtenir cette erreur si vous essayez d'exécuter une commande INSERT
, UPATE
ou DELETE
Au lieu d'utiliser SqlQuery
, utilisez ExecuteSqlCommand
using (var ctx = new SchoolDBEntities())
{
int noOfRowUpdated = ctx.Database.ExecuteSqlCommand("Update student
set studentname ='changed student by command' where studentid=1");
int noOfRowInserted = ctx.Database.ExecuteSqlCommand("insert into student(studentname)
values('New Student')");
int noOfRowDeleted = ctx.Database.ExecuteSqlCommand("delete from student
where studentid=1");
}
Pour plus de détails, visitez - http://www.entityframeworktutorial.net/EntityFramework4.3/raw-sql-query-in-entity-framework.aspx
Sur la base de la réponse de seconde que cgotberg m'a donnée, je vais répondre à ma propre question . Le problème avec ce code était que le champ de certaines tables n'était pas le même que celui de la base de données (je cherchais l'exception mais je ne pouvais pas le trouver, désolé pour cela), mais il existe en réalité . dû ajouter tous les champs des tables à la chaîne de requête. Je veux dire, je devais écrire "SELECT hospital_phone, holpital_street, etc, etc. FROM hospital", si j'écris "SELECT hospital_name FROM hospital", l'exception se produit.
J'espère que j'ai bien expliqué.