列名无效.[节点名称(如果有)=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))
知道这里可能出了什么问题吗?
我安装了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'
它成功了!