【问题标题】:Executing stored procedure using .dbml file LINQ使用 .dbml 文件 LINQ 执行存储过程
【发布时间】:2014-11-30 15:31:29
【问题描述】:

使用 VS 2013 (VB) 和 SQL Server 2012。

我执行一个存储过程来使用 linq 填充一个网格视图。

Dim db As New GMConnectionDataContext
Dim gasHedges = db.GasHedges_create2ndMonth.ToList

存储过程返回一个结果集,并且工作正常,因为它返回了预期的结果,gridview 显示为所需的。

我在我的 SQL 表中添加了一些数据并加载了网页,但没有显示新数据。如果我在 SQL Server 中执行存储过程,则会显示新数据。如果我在 VS 中执行存储过程,则会显示新数据。

现在有点奇怪。如果我从.dbml 文件中删除对存储过程的引用,然后重新添加它,新数据会在页面加载时显示。我知道在使用此文件时,如果我将列添加到表中,则需要将其删除并将表重新添加到 .dbml 文件中。

存储过程当然不是这样,因为它们将无法使用。有什么我遗漏的吗?

更新

我想我知道为什么会发生这种情况,但我不知道如何解决它。当我在 SQL 中使用 pivot 命令时,SQL 结果集具有动态列。这意味着如果用户创建了一家新的 Gas 公司,结果集将有另一列,并且 datacontext 必须将其解释为 SP 已更改并仍显示旧数据集。这确实意味着我不能只从数据上下文中删除 SP 并重新添加它,因为如果用户添加另一家公司,Web 应用程序需要处理。

【问题讨论】:

    标签: sql sql-server vb.net linq stored-procedures


    【解决方案1】:

    最佳实践要求您不要在 SQL 中转置数据。透视数据不是数据相关问题;它是表示,应该在表示层——在应用程序中完成。

    【讨论】:

      【解决方案2】:

      您在 SQL Server 中所做的任何更改都不会自动同步到您的 .dbml 文件。如果您对表或存储过程进行了更改,您需要将它们从 .dbml 文件中删除并重新添加。

      【讨论】:

      • 所以我每次运行存储过程时都需要这样做?
      • 我该怎么做
      • 是的。您所做的任何更改都需要在 .dbml 文件中进行更新。如果您展开 dbml,您将看到一个设计器文件,其中包含存储过程和表的定义。这些需要在进行更改时重新生成。在 Visual Studio 中,打开 .dbml 文件,您将看到您的表和存储过程。您只需右键单击并删除任何更改。然后,打开您的服务器资源管理器并展开您的 dbml 正在使用的连接并拖放更新的项目。构建你的项目,一切都会更新。
      • 更新了我原来的问题,因为我想我知道为什么会这样,只是不知道如何解决它。
      • 如果您有动态列,则必须使用 SQLCommand 和 DataReader 来调用存储过程,而不是 DataContext。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-30
      • 2013-06-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多