2014-10-06 87 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。透視數據不是數據相關的問題;它是演示文稿,應該在表示層 - 在應用程序中完成。