如何正确加载条件Linq-to-SQL存储过程的DataContext

时间:2009-01-26 19:39:20

标签: c# .net sql linq-to-sql

我有一个存储过程,可以对参数进行验证

离。

IF @SearchType = 'BNa'
BEGIN
    ... DO something
END
ELSE IF @SearchType = 'SNa'
BEGIN
    ... DO something
END

因此,默认情况下,Stored Proc会返回一个标量值,如果SearchType =有效,它将返回一个IMultipleValues。

问题在于,当我将Stored Proc放在DataContext设计器中时,它会为只返回标量int的函数创建LINQ-to-SQL。它不知道Strored Proc可以返回带有标量值和DataSet的IMultipleResults。

任何人都知道如何使用LINQ-to-SQL来推断可能的返回值?

1 个答案:

答案 0 :(得分:0)

我无法直接回答您的问题,但是您是否尝试使用SQL事件探查器来确定设计器如何检索存储过程的元数据?

我认为在您的情况下,设计师可能无法为您解决问题。 SQL Profiler会让你明白这一点......无论如何...

我在使用SqlMetal(而不是设计师)方面有过非常积极的体验。为了节省您,Google搜索文档位于http://msdn.microsoft.com/en-us/library/bb386987.aspx

您可以使用SqlMetal的方法之一是:

  1. 运行SqlMetal以将数据库元数据提取到DBML文件。
  2. 在DBML文件上运行一些自定义处理(这很容易,因为它只是XML)。
  3. 再次运行SqlMetal以将更新的DBML转换为代码。
  4. 使用此方法,您可以更正用于存储过程的元数据(假设无法正确确定)。

    对我来说,这种方法的成功之处在于,您可以随时修改数据库,并轻松地重新生成匹配的强类型代码,同时仍然保持对生成内容的高度控制。