Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

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.

//would work if all you're trying to do is get the Name:
db.Database.SqlQuery<IEnumerable<string>>("SELECT hospitalName FROM hospital"); 

//where you define MyEntity as the same structure as the table would work
db.Database.SqlQuery<MyEntity>("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>
db.Database.SqlQuery<IEnumerable<Tuple<int, string>>>("SELECT * FROM hospital");

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


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


This solved my issue, some results where not getting the way it was supposed to

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

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

here single or multiple results can be caught