列名无效.[节点名称(如果有)=t0,列名=版本]

本文关键字:t0 版本 列名 如果 无效 节点 | 更新日期: 2023-09-27 18:21:41

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

执行时出现异常

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

知道这里可能出了什么问题吗?

列名无效.[节点名称(如果有)=t0,列名=版本]

我安装了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到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'

它成功了!