【问题标题】:How to corretly load DataContext of Conditional Linq-to-SQL Stored Proc如何正确加载条件 Linq-to-SQL 存储过程的数据上下文
【发布时间】:2009-01-26 19:39:20
【问题描述】:

我有一个对参数进行验证的存储过程

例如

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

所以默认情况下,存储过程返回一个标量值,如果 SearchType = 有效的值,它将返回一个 IMultipleValues。

问题是,当我将存储过程放在 DataContext 设计器中时,它会为仅返回标量 int 的函数创建 LINQ-to-SQL。它不理解 Strored Proc 可以返回带有标量值和 DataSet 的 IMultipleResults。

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

【问题讨论】:

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


    【解决方案1】:

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

    我认为在您的情况下,设计师可能无法为您解决问题。无论哪种方式,SQL Profiler 都能让您确定这一点...

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

    您可以使用 SqlMetal 的一种方式是:

    1. 运行 SqlMetal 将数据库元数据提取到 DBML 文件。
    2. 对 DBML 文件运行一些自定义处理(这很容易,因为它只是 XML)。
    3. 再次运行 SqlMetal 将更新后的 DBML 转换为代码。

    使用这种方法,您可以更正用于存储过程的元数据(假设无法正确确定)。

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

    【讨论】:

    • 不完全是我想要的,但似乎是解决我的问题的唯一方法。对我来说几乎是一个答案,但我决定放弃 Linq。
    • 很公平。你最了解你的要求。另一种方法可能是尝试用 C# 和 LINQ 重写存储过程...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-09
    • 2012-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-10
    相关资源
    最近更新 更多