Имя столбца недопустимо.[Имя узла (если есть) = t0, имя столбца = версия] - PullRequest
8 голосов
/ 29 января 2012

Возникла проблема при попытке запроса базы данных SQLCE в приложении Windows Phone Mango.

Я получаю исключение при выполнении

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

Есть идеи, что здесь может быть не так?

Ответы [ 4 ]

5 голосов
/ 29 января 2012

Я установил 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. Я предполагаю, что в этом инструменте есть ошибка, из-за которой он сгенерировал дополнительный столбец, которого у меня не было в моей таблице

2 голосов
/ 27 апреля 2012

У меня была такая же проблема с инструментом «SQLCEMangoCodeGenerator».

Я начал использовать инструмент «SQL Server Compact Toolbox», и у меня не было никаких проблем: http://visualstudiogallery.msdn.microsoft.com/0e313dfd-be80-4afb-b5e9-6e74d369f7a1/

(найдите «NEW: DataContext» на приведенном выше веб-сайте для получения снимка экрана. После установки расширения щелкните «SQL Server Compact Toolbox» в меню «Инструменты»)

1 голос
/ 19 августа 2014

Я решил эту проблему, удалив всю базу данных и воссоздав ее заново.

Очевидно, это происходит, если у вас в базе данных более старая версия таблицы, чем вы хотите использовать, таким образом, этот столбец не существуеттаблица.

0 голосов
/ 25 декабря 2014

В SqlCE.sdf с SQL Server Managment Studio запустите:

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

возникла похожая проблема с недопустимым именем столбца, но изменено цитаты на апострофы :

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

и все заработало!

...