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

8
我在尝试查询Windows Phone Mango应用程序中的SQLCE数据库时遇到了问题。
当我执行以下代码时,会出现异常:
foreach (var item in myDataContext.MyTable.Select(item => item))
错误信息为“列名无效。[节点名称(如果有)= t0,列名= version]”。
奇怪的是,当我基于任何单个列执行查询时,它可以正常工作。
foreach (var item in myDataContext.MyTable.Select(item => item.SomeColumn))
你有什么想法这里可能出了什么问题?

你的版本列是“主键”吗? - Tigran
我没有版本列。 - Haris Hasan
4个回答

5
我安装了 LINQ to SQL Debug Visualizer,以便找出在幕后生成的确切查询,结果是: {SELECT [t0].[version]、[t0].[ID]、[t0].[Volume]、...以及其他列 FROM [MyTable] AS [t0] 这很奇怪,因为我的表中从未有过版本列。我查看了我的模型,发现这一列被定义了。
[Column(IsVersion = true)]
private Binary version;

我通过注释掉这两行代码并重新运行应用程序来删除了列。新生成的 SQL 没有任何 version 列,我的查询也正常工作。
我正在使用 SQLCEMangoCodeGenerator 生成 LINQ to SQL 类。我猜测错误在于这个工具,因为它生成了一个我表格中没有的额外列。

尝试使用 SQL Server Compact 工具箱生成 DataContext! - ErikEJ

2

1
我通过删除整个数据库并重新创建来解决了这个问题。
显然,如果您的数据库中存在比您想要使用的表旧的版本,则会发生这种情况,因此该列不存在于该表中。

0
在SQL Server管理工具中,使用SqlCE.sdf运行以下命令:

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

如果出现类似的列名无效的问题,请将引号更改为撇号

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

然后就可以运行成功了!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接