2014-10-06 58 views
2

使用VS 2013(VB)和SQL Server 2012的使用.dbml文件LINQ

我执行存储过程使用LINQ来填充GridView控件执行存储过程。

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

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

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

现在这个奇怪的位。如果我从.dbml文件中删除对存储过程的引用,然后重新添加它,新数据将在页面加载时显示。我知道当使用这个文件时,如果我在表中添加列,那么我需要删除它并重新将该表添加到.dbml文件中。

当然,存储过程并非如此,因为它们将不可用。有什么我失踪?

修订

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

回答

0

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

+0

所以我每次运行存储过程都需要这样做? – Silentbob 2014-10-13 13:35:11

+0

另外我该怎么做 – Silentbob 2014-10-13 13:35:39

+0

是的。您所做的任何更改都需要在.dbml文件中更新。如果你展开你的dbml,你会看到一个设计器文件,在那里是你的存储过程和表的定义。这些需要在更改时重新生成。在Visual Studio中,打开.dbml文件,您将看到您的表格和存储的特效。您可以右键单击并删除更改的内容。然后,打开您的服务器资源管理器并展开您的dbml正在使用的连接,然后拖放更新的项目。建立你的项目,一切都会更新。 – MikeHe 2014-10-13 13:40:23

0

最佳实践将决定您不要将数据转换为SQL。透视数据不是数据相关的问题;它是演示文稿,应该在表示层 - 在应用程序中完成。