"The data reader has more than one field" error in Entity Framework

.net c# entity-framework

Question

I'm executing this simple query with Entity Framework

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

But I got this error:

The data reader has more than one field. Multiple fields are not valid for EDM primitive or enumeration types.

What could be the problem?

1
29
9/9/2016 3:56:29 PM

Accepted Answer

It would be useful to see what the hospital table looks like but assuming something simple like hospital consists of HospitalId and HospitalName then you have a couple of choices.

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>

Basically the error is the code doesn't know how to stuff the structure of hospital into a string

40
4/10/2013 6:54:49 PM

Popular Answer

You might also get this error if you are trying to execute an INSERT, UPATE or DELETE command

Instead of using SqlQuery use 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");
}

For more details visit - http://www.entityframeworktutorial.net/EntityFramework4.3/raw-sql-query-in-entity-framework.aspx



Related Questions





Related

Licensed under: CC-BY-SA with attribution
Not affiliated with Stack Overflow
Licensed under: CC-BY-SA with attribution
Not affiliated with Stack Overflow