C# &引用;数据读取器有多个字段“;实体框架中的错误

C# &引用;数据读取器有多个字段“;实体框架中的错误,c#,.net,entity-framework,C#,.net,Entity Framework,我正在用实体框架执行这个简单的查询 db.Database.SqlQuery<string>("SELECT * FROM hospital"); db.Database.SqlQuery(“从医院选择*); 但我有一个错误: 数据读取器有多个字段。多个字段对于EDM基元或枚举类型无效 可能有什么问题?查看医院表的外观会很有用,但假设类似hospital的简单内容由HospitalId和HospitalName组成,那么您有两种选择 //would work if all you

我正在用实体框架执行这个简单的查询

db.Database.SqlQuery<string>("SELECT * FROM hospital");
db.Database.SqlQuery(“从医院选择*);
但我有一个错误:

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


可能有什么问题?

查看医院表的外观会很有用,但假设类似hospital的简单内容由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");
//如果您只想获取名称,则可以:
SqlQuery(“从医院中选择hospitalName”);
//您将MyEntity定义为与表相同的结构
SqlQuery(“选择*来自医院”);
//虽然我还没试过,但理论上是可行的。元组在哪里
//项目必须按顺序匹配数据库类型。即,如果字段1
//是一个整数,字段2是一个字符串,然后是元组
SqlQuery(“选择*来自医院”);

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

基于cgotberg给我的第二个正确答案,我将回答我自己的问题。 该代码的问题是,某些表的字段与数据库中的字段不一样(我正在查找异常,但找不到它,很抱歉),但它实际上存在。 出于某种原因,我不得不将表的所有字段添加到查询字符串中。我的意思是,我必须写“从医院选择医院电话、holpital街等”,如果我写“从医院选择医院名称”,则会出现例外情况


希望我解释得很好。

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

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

var s = db.ExecuteStoreQuery<List<string>>("exec " + storedProcedure).ToList();
string storedProcedure=“Admin\u AutoGenerateKeywordsFortblCompany@Company\u ID=”
+康皮德;
var s=db.executesToRequesty(“exec”+storedProcedure.ToList();

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

如果您试图执行
插入
更新
删除
命令,也可能会出现此错误

使用
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");
}
欲了解更多详情,请访问-

试试这个db.executesToRecommend(“从医院选择*);它说我没有包含ExecuteStoreCommand的定义。。。是否缺少using指令或assambly引用?请尝试此db.Database.EXECUTESQLCOMAND它也不起作用,在foreach中引发异常“无法将int转换为IEnumerable”holpital值中并非所有值都是StringFirts给出错误:“数据读取器有多个字段。多个字段对EDM基元或枚举类型无效”。segun字段表示ID与数据库中的ID不同,但相同。最后一个字段表示:“结果类型'System.Collections.IEnumerable'可能不是抽象的,并且必须包含默认构造函数。“整个问题是,函数SqlQuery需要一个容器来压缩结果,因此SqlQuery意味着您最多可以检索一个字符串类型的字段。因此,您可能应该使用cgotbergs作为第二个示例!你知道,我会选择第二个。ID与数据库中的ID不同的问题在于,出于某种原因,我不得不将表的所有字段添加到查询字符串中。我的意思是,我必须写“从医院选择医院\电话、holpital \街等”,如果我写“从医院选择医院\名称”,就会出现异常……使用IEnumerable总是失败。我使用了这个列表,它工作得很好:)2016年的答案是,你正在学习ObjectContext,这很好,但我会在你的代码中解释这一点。