Linq to SQL(设计者)不了解存储过程

时间:2010-01-05 17:04:43

标签: linq-to-sql .net-3.5 stored-procedures

为什么Linq to SQL设计器不能理解以下存储过程并正确导入它?

CREATE PROCEDURE dbo.MartinTest
    @parameter1 INTEGER

AS
    SET NOCOUNT ON

    SELECT C1, C2, C3 
    INTO #myTempTable
    FROM MyTable

    SELECT C1, C2, C3
    FROM MyOtherTable INNER JOIN #myTempTable ON ....

    RETURN

当我使用设计器导入此存储过程时,它将返回类型设置为“none”,即使SP清楚地返回一行或多行数据。

然而,如果我删除了第一个select语句,而只是返回原始表的内容......

CREATE PROCEDURE dbo.MartinTest
    @parameter1 INTEGER

AS
    SET NOCOUNT ON

    SELECT C1, C2, C3
    FROM MyTable

    RETURN

......设计师工作正常并确定正确的返回类型。

BTW:我知道我可以手动编写对存储过程的调用,所以我不是在寻找解决方法,我更感兴趣的是这是否是Linq to SQL设计器中的错误或是否是别的。我正在使用VS2008 SP1。

感谢。

2 个答案:

答案 0 :(得分:4)

这在技术上不是Linq to SQL设计器的问题,这是SQL Server的一个问题。 Linq to SQL designer使用SET FMTONLY ON来获取存储过程的结果集信息。不幸的是,当存储过程有临时表时,此方法不起作用。

ScottGu's blog post的前几条评论中,有一个小小的来回。

答案 1 :(得分:1)

您可以在存储过程的开头手动SET FMTONLY OFF。可能会将其注释为正常使用,并且仅在生成LINQ类时取消注释。