我编写了一个存储过程,在其中使JOIN并从两个表中获取数据。
我从存储过程中的JOIN中获取了Invigilator名称以及城市名称,但是在Entity Framework存储过程中未运行,并且下面的异常即将到来
消息“数据读取器与指定的读取器不兼容 'pts_dbnModel.GetInviglatorData_Result'。该类型的成员, “ Name1”在数据读取器中没有对应的列 相同的名称。“字符串
select s.Name,s.contact ,c.Name ,s.frequency,s.cnic from zaid.invigilator s
INNER JOIN zaid.city c ON s.city=c.ID
INNER JOIN CompaignInvigilatorMapping m ON s.ID=m.InvigilatorId
INNER JOIN [hasnat.compaign] h ON m.CompaignId=h.ID where
h.CompaignName=@CompName
现在问题出在Name字段上。因为s.Name来自Invigilator表,而c.Name来自城市表。
答案 0 :(得分:1)
使用别名
select s.Name as invaigilatorName,s.contact ,c.Name as cityName ,s.frequency,s.cnic from zaid.invigilator s
INNER JOIN zaid.city c ON s.city=c.ID
INNER JOIN CompaignInvigilatorMapping m ON s.ID=m.InvigilatorId
INNER JOIN [hasnat.compaign] h ON m.CompaignId=h.ID where
h.CompaignName=@CompName
答案 1 :(得分:1)
您有两个具有相同列名的表,因此您的选择查询不会像以前那样出现问题,如果您不限定列名(例如s.Name,c.Name
),则会得到异常
列名“名称”不明确。
但是您的问题与EF
有关,该错误消息表示您的存储过程的结果不包含名为Name1
的列,您有两种选择来解决此问题。
1-在您的存储过程中以别名(例如:
)显示Name1
select s.Name as Name1,s.contact ,c.Name ,s.frequency,s.cnic from zaid.invigilator s
INNER JOIN zaid.city c ON s.city=c.ID
INNER JOIN CompaignInvigilatorMapping m ON s.ID=m.InvigilatorId
INNER JOIN [hasnat.compaign] h ON m.CompaignId=h.ID where
h.CompaignName=@CompName
2-或使您的EF模型和查询与存储过程的输出兼容(例如,将Name1
模型中的Name
重命名为EF
)。
您的存储过程本身并没有问题,但是它应该与您的EF
模型兼容,反之亦然。