我也有类似的问题,因为在(附加)EF不能从存储过程选择来自#temp表
EF can't infer return schema from Stored Procedure selecting from a #temp table
描述推断回归模式,我已经基于创建的我的存储过程的解决方案解决方案如上所述,但我仍然得到类似的EF错误,我真的不知道为什么或了解我如何解决它。
A member of the type, 'rowNum', does not have a corresponding column in the data reader with the same name.
我的具体错误:
The data reader is incompatible with the specified 'TestModel.sp_SoInfoDocs_Result'. A member of the type, 'rowNum', does not have a corresponding column in the data reader with the same name.
我的存储过程:
ALTER PROCEDURE [dbo].[sp_SoInfoDocs]
@searchText nvarchar(200),
@PageNumber int,
@PageSize int
AS
BEGIN
IF 1 = 2
BEGIN
SELECT
cast(null as int) as rowNum
,cast(null as text) as serverName
,cast(null as text) as jobName
,cast(null as DATETIME) as oDate
,cast(null as int) as runCount
,cast(null as nvarchar(10)) as orderID
,cast(null as text) as applicationName
,cast(null as text) as memberName
,cast(null as text) as nodeID
,cast(null as nvarchar(10)) as endStatus
,cast(null as int) as returnCode
,cast(null as DATETIME) as startTime
,cast(null as DATETIME) as endTime
,cast(null as nvarchar(50)) as status
,cast(null as text) as owner
,cast(null as bit) as existsNote
WHERE
1 = 2
END
DECLARE @LowerLimit int;
SET @LowerLimit = (@PageNumber - 1) * @PageSize;
DECLARE @UpperLimit int;
SET @UpperLimit = @PageNumber * @PageSize;
PRINT CAST (@LowerLimit as varchar)
PRINT CAST (@UpperLimit as varchar)
SELECT ROW_NUMBER() over (order by Expr1) as rowNum, *
into #temp
from (
SELECT dbo.SOInfo.jobName, dbo.SOInfo.nodeID, dbo.SOInfo.nodeGroup, dbo.SOInfo.endStatus, dbo.SOInfo.returnCode, dbo.SOInfo.startTime, dbo.SOInfo.endTime,
dbo.SOInfo.oDate, dbo.SOInfo.orderID, dbo.SOInfo.status, dbo.SOInfo.runCount, dbo.SOInfo.owner, dbo.SOInfo.cyclic, dbo.SOInfo.soInfoID, dbo.SOInfo.docInfoID,
dbo.SOInfo.existsNote, dbo.SOInfo.noSysout, dbo.serverInfo.serverName, dbo.Groups.label AS applicationName, Groups_1.label AS memberName,
Groups_2.label AS groupName, Groups_3.label AS scheduleTableName, dbo.SOInfo.serverInfoID, dbo.SOInfo.applicationID, dbo.SOInfo.groupID,
dbo.SOInfo.memberID, dbo.SOInfo.scheduleTableID, dbo.docFile.docFileID, dbo.docInfo.docInfoID AS Expr1, dbo.docFile.docFileObject
FROM dbo.SOInfo INNER JOIN
dbo.serverInfo ON dbo.SOInfo.serverInfoID = dbo.serverInfo.serverInfoID INNER JOIN
dbo.docInfo ON dbo.SOInfo.docInfoID = dbo.docInfo.docInfoID INNER JOIN
dbo.docFile ON dbo.docInfo.docFileID = dbo.docFile.docFileID LEFT OUTER JOIN
dbo.Groups AS Groups_3 ON dbo.SOInfo.scheduleTableID = Groups_3.ID LEFT OUTER JOIN
dbo.Groups AS Groups_1 ON dbo.SOInfo.memberID = Groups_1.ID LEFT OUTER JOIN
dbo.Groups AS Groups_2 ON dbo.SOInfo.groupID = Groups_2.ID LEFT OUTER JOIN
dbo.Groups ON dbo.SOInfo.applicationID = dbo.Groups.ID
WHERE CONTAINS (docfileObject,@searchText)
) tbl
SELECT Count(1) FROM #temp
SELECT rowNum, serverName, jobName ,oDate,runCount,orderID,applicationName,memberName,nodeID, endStatus, returnCode,startTime,endTime,status,owner,existsNote
FROM #temp WHERE rowNum > @LowerLimit AND rowNum <= @UpperLimit
END
我的总体目标是:
搜索通过聚集索引表(文档信息)和找到所有行c ontain一个特定的搜索字符串值
在从其它表与每个DOCINFO对象相关联的同时捕获的元数据
的动作(1)和实验结果(2)上述被写入到一个#temp表到然后我添加一个rowNum列以使我能够引入分页,例如
根据提供的PageNumber和PageSize变量,在任何时候都可以返回元数据结果的数量。
什么工作
我能够成功地创建存储过程。
在SSMS我能够成功执行存储过程,并提供我所期望的结果,这里是一个例子
在EF我已经能够更新并导入存储过程从数据库更新
在EF我再能看到功能IMPOR TS和能看到我就能够看到生成的复杂类型
我用下面的代码来调用映射
在ED过程
using (TestEntities context = new TestEntities()) { List<sp_SoInfoDocs_Result> lst = context.sp_SoInfoDocs(searchText, 1, 10).ToList(); }
我编译和运行我的解决方案,并从EF收到以下错误
'System.Data.Entity.Core.EntityCommandExecutionException' occurred in EntityFramework.SqlServer.dll
Additional information: The data reader is incompatible with the specified 'SysviewModel.sp_SoInfoDocs_Result'. A member of the type, 'rowNum', does not have a corresponding column in the data reader with the same name.
我非常新手/基本用户,当谈到这两个SSMS/SQL和EF,这已经捉襟见肘我尽我所知/可以去,我真的不知道要转向下一步以解决这个问题。
我已经通过搜索广泛搜索,可以看到其他谁有类似的问题,并尝试了解决方案建议,但似乎没有为我工作。
我真的会非常非常感谢的人谁可以帮助我了解
它是什么,是错的/我做了什么错?
有没有更好的方法来实现我所需要的?
关于如何解决这个问题的想法。
在此先感谢
也许你需要阅读这一点:在描述一些条件http://stackoverflow.com/a/32128830/5070879简答在那里你不能获取创建映射/提供者/等等所需的元数据... – lad2025
@ lad2025〜感谢您的支持。 –