列名无效。

我在尝试在Windows Phone Mango应用程序中查询SQLCE数据库时遇到问题。

我执行时遇到exception

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))

知道这里有什么问题吗?

我安装了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类。 我猜错误在这个工具中,因为它生成了一个额外的列,我没有在我的表中

我在“SQLCEMangoCodeGenerator”工具中遇到了同样的问题。

我开始使用“SQL Server Compact Toolbox”工具,我没有遇到任何问题: http : //visualstudiogallery.msdn.microsoft.com/0e313dfd-be80-4afb-b5e9-6e74d369f7a1/

(在上面的网站上搜索“NEW:DataContext”以获得屏幕截图。安装扩展程序后,单击“工具”菜单中的“SQL Server Compact Toolbox”)

我通过删除整个数据库并重新创建它来解决了这个问题。

很明显,如果您在数据库中使用的旧版本的表比您想要使用的那样,则会发生这种情况,因此该表中不存在该列。

在带有SQL Server Managment Studio的SqlCE.sdf中运行:

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

列名无效的类似问题,但更改了撇号的 引用

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

它工作了!