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

前端 未结 4 1702
我寻月下人不归
我寻月下人不归 2020-12-10 00:42

I\'m executing this simple query with Entity Framework

db.Database.SqlQuery(\"SELECT * FROM hospital\");

But I got this error

相关标签:
4条回答
  • 2020-12-10 01:12

    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

    0 讨论(0)
  • 2020-12-10 01:19

    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

    0 讨论(0)
  • 2020-12-10 01:30

    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

    0 讨论(0)
  • 2020-12-10 01:33

    Based on the secound answer that cgotberg gave me, Im going to answer my own question. The problem with that code was that some table's field was not the same as it is in the database(I was looking for the exception but I could not found it, sorry for that) but it actually exist. For some reason i had to add all the fields of the tables to the query string. I mean, i had to write "SELECT hospital_phone, holpital_street, etc, etc FROM hospital", if i write "SELECT hospital_name FROM hospital" the exception occurs.

    Hope I've it explained well.

    0 讨论(0)
提交回复
热议问题