2012-01-29 46 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'

它工作!