2012-02-02 57 views
2

我有LINQ不能處理一個簡單的存儲過程。我嘗試過使用和不使用臨時表的變體,但總是得到相同的結果:「無法檢測到以下存儲過程的返回類型。」的LINQ to SQL無法檢測到存儲過程返回類型

這裏有兩個版本我都試過:

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 

我在LINQ到SQL(.NET 4.0)想這一點,並在實體框架。 EF甚至沒有看到SP。

回答

0

RETURN 0

是在這兩種情況下的罪魁禍首。失去它,Linq應該能夠檢測你的結果集的類型。

+0

沒有它也不能工作時,我加入了。有了它,LINQ根本無法識別這個簡單的查詢。 – 2012-02-03 16:56:31

0

Sql的Linq不會從存儲過程中直接得到的結果。將返回ISingleResult。您必須枚舉結果集以獲取從存儲過程返回的值。

1

由於我忘記的原因,Linq-to-SQL將無法從返回結果集的存儲過程中自動派生結果類型,除非在存儲過程中包含以下T-SQL行,然後將其放到LINQ到SQL設計師

SET FMTONLY OFF; 

試試這個:

  1. 插入後立即在你的PROC BEGIN語句上面的代碼。
  2. 如果您還沒有這樣做的話,除去返回0,你以前被告知。
  3. 爲您的proc執行ALTER。
  4. 更新您的VS.NET服務器資源管理器
  5. 將proc拖放到您的數據模型設計器上。
  6. 當你在設計選擇PROC,在屬性面板中應顯示返回類型(自動生成的類型)。
  7. 保存數據模型。
  8. 返回到您的存儲過程並註釋掉SET命令:

    --set FMTONLY OFF;

  9. 執行ALTER您PROC。希望我能記得爲什麼在達到目的之後有必要擺脫它。

相關問題