wake-up-neo.net

Fehler "Der Datenleser hat mehr als ein Feld" in Entity Framework

Ich führe diese einfache Abfrage mit Entity Framework aus

db.Database.SqlQuery<string>("SELECT * FROM hospital");

Aber ich habe diesen Fehler bekommen:

Der Datenleser hat mehr als ein Feld. Mehrere Felder sind für EDM-Grundelemente oder Aufzählungstypen nicht gültig.

Was könnte das Problem sein?

26
user2195741

Es wäre nützlich zu sehen, wie der Krankenhaustisch aussieht. Wenn man jedoch annimmt, dass das Krankenhaus aus HospitalId und HospitalName besteht, haben Sie mehrere Möglichkeiten.

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>

Grundsätzlich ist der Fehler, dass der Code nicht weiß, wie er die Struktur eines Krankenhauses in eine Zeichenfolge packt

35
cgotberg

Dies löste mein Problem, einige Ergebnisse wurden nicht so erreicht, wie es sollte

string storedProcedure = "Admin_AutoGenerateKeywordsFortblCompany @Company_ID=" + CompId;

var s= db.ExecuteStoreQuery<List<string>>("exec " + storedProcedure).ToList();

hier können einzelne oder mehrere Ergebnisse erfasst werden

6
user4584103

Diese Fehlermeldung wird möglicherweise auch angezeigt, wenn Sie versuchen, einen Befehl INSERT, UPATE oder DELETE auszuführen

Verwenden Sie anstelle von SqlQueryExecuteSqlCommand.

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");
}

Weitere Informationen finden Sie unter - http://www.entityframeworktutorial.net/EntityFramework4.3/raw-sql-query-in-entity-framework.aspx

Basierend auf der zweiten Antwort, die mir cgotberg gegeben hat, werde ich meine eigene Frage beantworten. Das Problem bei diesem Code war, dass das Feld einiger Tabellen nicht das gleiche war wie in der Datenbank (ich suchte nach der Ausnahme, konnte es aber nicht finden, tut mir leid), aber es existiert tatsächlich ... _ musste alle Felder der Tabellen zur Abfragezeichenfolge hinzufügen. Ich meine, ich musste "SELECT hospital_phone, holpital_street, etc etc FROM hospital" schreiben, wenn ich "SELECT hospital_name FROM hospital" schreibe, tritt die Ausnahme auf.

Hoffe ich habe es gut erklärt.

0
user2195741