我在尝试在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))
知道这里有什么不对吗?
答案 0 :(得分: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类。我想错误就在这个工具中,因为它生成了一个我在表格中没有的额外列
答案 1 :(得分:2)
我遇到了与“SQLCEMangoCodeGenerator”工具相同的问题。
我开始使用“SQL Server Compact Toolbox”工具,我没有遇到任何问题: http://visualstudiogallery.msdn.microsoft.com/0e313dfd-be80-4afb-b5e9-6e74d369f7a1/
(在上面的网站上搜索“NEW:DataContext”以获得截屏。安装扩展程序后,单击“工具”菜单中的“SQL Server Compact Toolbox”)
答案 2 :(得分:1)
我通过删除整个数据库并重新创建它来解决了这个问题。
很明显,如果您在数据库中使用的旧版本比您想要使用的那样,则会发生这种情况,因此该表中不存在该列。
答案 3 :(得分:0)
在带有SQL Server Managment Studio的SqlCE.sdf中运行:
DELETE FROM [User] WHERE [User].[UserName] = "zz"
类似的问题,列名无效,但将引号更改为撇号:
DELETE FROM [User] WHERE [User].[UserName] = 'zz'
它有效!