2012-01-29 103 views
8

我在嘗試查詢我的Windows Phone Mango應用程序中的SQLCE數據庫時遇到問題。列名稱無效。 [節點名稱(如果有的話)= t0,列名=版本]

我得到異常,當我執行

foreach (var item in myDataContext.MyTable.Select(item => item))

The column name is not valid. [ Node name (if any) = t0,Column name = version ]

奇怪的是,當我基於任何單獨的列執行查詢時,它工作正常

foreach (var item in myDataContext.MyTable.Select(item => item.SomeColumn))

任何想法這裏有什麼可能是錯誤的?

+0

您的版本列是「主鍵」嗎? – Tigran 2012-01-29 18:33:30

+0

我沒有版本列 – 2012-01-29 18:35:23

回答

5

我安裝LINQ to SQL Debug Visualizer找出查詢完全被幕後生成的內容,它是

{SELECT [t0].[version], [t0].[ID], [t0].[Volume], ... similarly rest of the columns FROM [MyTable] AS [t0]

這很奇怪,因爲我沒有在我的表(曾經)有版本列。我看着我的模型,我發現這個列定義

[Column(IsVersion = true)] 
private Binary version; 

我刪除列註釋掉這兩行並重新運行應用程序。新生成的SQL沒有任何version列,我的查詢工作正常。

我使用SQLCEMangoCodeGenerator來生成LINQ to SQL類。我猜錯誤是在這個工具,因爲它產生了一個額外的列,我沒有在我的表

+0

嘗試使用SQL Server Compact Toolbox生成DataContext! – ErikEJ 2012-01-30 08:18:31

1

我通過刪除整個數據庫並重新創建它來解決此問題。

如果您的數據庫中的表的版本比您想要使用的版本舊,則會發生這種情況,因此該表不存在於該表中。

0

在SqlCE.sdf與SQL Server梟雄Studio中運行:

DELETE FROM [User] WHERE [User].[UserName] = "zz"

得到了類似的問題,與列名無效,但改變報價撇號

DELETE FROM [User] WHERE [User].[UserName] = 'zz'

它工作!