33

我正在使用 Entity Framework 执行这个简单的查询

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

但我得到了这个错误:

数据阅读器有多个字段。多个字段对 EDM 基元或枚举类型无效。

可能是什么问题呢?

4

4 回答 4

45

查看医院表的外观会很有用,但假设像医院这样简单的东西由 HospitalId 和 HospitalName 组成,那么您有几个选择。

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

基本上错误是代码不知道如何将医院的结构填充到字符串中

于 2013-04-10T17:31:28.200 回答
7

如果您尝试执行INSERT,UPATEDELETE命令,您也可能会收到此错误

而不是使用SqlQuery使用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");
}

有关更多详细信息,请访问 - http://www.entityframeworktutorial.net/EntityFramework4.3/raw-sql-query-in-entity-framework.aspx

于 2018-03-16T17:05:39.563 回答
7

这解决了我的问题,一些结果没有达到预期的效果

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

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

这里可以捕获单个或多个结果

于 2016-05-11T06:41:05.593 回答
0

根据cgotberg给我的第二个答案,我将回答我自己的问题。该代码的问题是某些表的字段与数据库中的字段不同(我正在寻找异常但我找不到它,对此感到抱歉)但它确实存在。出于某种原因,我不得不将表的所有字段添加到查询字符串中。我的意思是,我必须写“SELECT hospital_phone, holpital_street, etc, etc FROM hospital”,如果我写“SELECT hospital_name FROM hospital”,就会发生异常。

希望我已经解释得很好。

于 2013-04-11T12:21:49.720 回答