Linq to sql LINQ to SQL无法检测存储过程返回类型

Linq to sql LINQ to SQL无法检测存储过程返回类型,linq-to-sql,stored-procedures,Linq To Sql,Stored Procedures,我有一个LINQ无法处理的简单存储过程。我尝试过使用和不使用临时表的变体,但总是得到相同的结果:“无法检测到以下存储过程的返回类型。” 以下是我尝试过的两种变体: CREATE PROCEDURE GetBOQuestions @JobId int AS BEGIN SELECT Id, ExemptionCode, Prose [Question], InputType, DisplayOrder FROM Assessor.FLSA.Black

我有一个LINQ无法处理的简单存储过程。我尝试过使用和不使用临时表的变体,但总是得到相同的结果:“无法检测到以下存储过程的返回类型。”

以下是我尝试过的两种变体:

CREATE PROCEDURE GetBOQuestions @JobId int AS
BEGIN
    SELECT  Id, ExemptionCode, Prose [Question], InputType, DisplayOrder
            FROM        Assessor.FLSA.BlackOpsQuestion Q
            LEFT JOIN   Common.dbo.FName F ON F.ajblVIDP = Q.ExemptionCode
            WHERE       ajblERI = @JobId OR Q.ExemptionCode IS NULL
    RETURN 0;
END
而且

CREATE PROCEDURE GetBOQuestions @JobId int AS
BEGIN
    DECLARE @TempTable TABLE 
    ( 
        Id VARCHAR(50), 
        ExemptionCode VARCHAR(10),
        Question VARCHAR(1000),
        InputType VARCHAR(20),
        DisplayOrder INT
    ) 
    INSERT INTO @TempTable (Id, ExemptionCode, Question, InputType, DisplayOrder)
    SELECT  Id, ExemptionCode, Prose [Question], InputType, DisplayOrder
            FROM        Assessor.FLSA.BlackOpsQuestion Q
            LEFT JOIN   Common.dbo.FName F ON F.ajblVIDP = Q.ExemptionCode
            WHERE       ajblERI = @JobId OR Q.ExemptionCode IS NULL

    SELECT Id, ExemptionCode, Question, InputType, DisplayOrder FROM @TempTable ORDER BY DisplayOrder
    RETURN 0;
END
我曾在LINQtoSQL(.NET4.0)和实体框架中尝试过这一点。EF甚至看不到SP。

该行

返回0


是这两起案件的罪魁祸首。丢失它,Linq应该能够检测结果集的类型。

Linq to Sql不会直接从存储过程中获取结果。相反,将返回一个
isingresult
。您必须枚举整个结果集才能获得从存储过程返回的值。

由于我忘记的原因,Linq to SQL将无法从返回结果集的存储过程自动派生结果类型,除非在将其放到Linq to SQL设计器之前在存储过程中包含以下T-SQL行:

SET FMTONLY OFF;
试试这个:

  • 在进程中的BEGIN语句之后插入上面的代码
  • 如果您尚未这样做,请按照之前的建议删除该返回0
  • 为您的进程执行ALTER
  • 参考您的VS.NET服务器资源管理器
  • 将过程拖放到数据模型设计器上
  • 在设计器中选择程序时,属性窗格应显示返回类型(自动生成类型)
  • 保存数据模型
  • 返回到存储过程并注释掉SET命令:

    --快速启动

  • 为您的进程执行ALTER。但愿我能记得为什么在它达到目的后就必须把它扔掉


  • 我在没有它的时候加上它也不起作用。不管有没有,LINQ都无法识别这个简单的查询。