使用.dbml文件LINQ执行存储过程

时间:2014-10-06 11:18:38

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

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

我执行存储过程以使用linq填充gridview。

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

存储过程返回结果集并且一直正常工作,因为它返回预期结果并且gridview根据需要显示。

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

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

存储过程肯定不是这样,因为它们将无法使用。有什么我想念的吗?

更新

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

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

最佳做法会要求您不要在SQL中透视数据。透视数据不是与数据相关的问题;它的演示文稿应该在表示层 - 在应用程序中完成。