Ошибка при вставке в хранилище таблиц (эмулятор). Один из входных данных запроса недействителен.

У меня есть процесс импорта, который берет данные из старого источника и помещает их в хранилище таблиц, что позволяет мне повторно инициализировать хранилище таблиц и начинать заново по мере необходимости. Он работал до обновления октябрьского пакета SDK Azure для .NET (VS2012). Теперь он не работает после вставки нескольких объектов (кажется, что импортированные данные не статичны по своей природе). Первый объект того же типа всегда вставляется успешно. Ключи разделов уникальны, и RowKey для каждого из них представляет собой пустую строку (not null). Не работает именно на SaveChangesWithRetries(). Есть ли в новом SDK изменения, несовместимые с тем, что я делал раньше?

Обновить

Я проверял фактический XML успешно вставленных строк, запрашивая базу данных хранилища таблиц. Я заметил одну вещь: столбец int, допускающий значение NULL, в сущности имеет SqlType nvarchar(max), когда он равен нулю, и int, когда он не равен нулю. Это предназначено?


person w.brian    schedule 27.10.2012    source источник
comment
Это происходит в эмуляторе? Или в реальной учетной записи хранения?   -  person Sandrino Di Mattia    schedule 28.10.2012


Ответы (3)


Итак, я смог успешно воспроизвести ошибку на постоянной основе, и оказалось, что это довольно неприятная ошибка, появившаяся в SDK за октябрь 2012 года.

Любая строка, оканчивающаяся пробелом, вызовет исключение. Вызов Trim () для всех строковых входов решил эту проблему.

person w.brian    schedule 28.10.2012

Это явно одна из проблем с эмулятором. Как вы, возможно, знаете, он имитирует хранилище таблиц в SQL Server. Это работает в большинстве случаев, но когда вы пытаетесь сделать что-то особенное, например, добавление дополнительных свойств, или в вашем случае просто смешиваете значения, допускающие значение NULL, и значения, не допускающие значения NULL, в свойстве, как правило, дела идут плохо.

На этой странице объясняются различия между реальной службой хранилища таблиц и реализация в эмуляторе. Но ваша проблема, похоже, еще не задокументирована. Вы найдете множество отчетов о проблемах с эмулятором хранилища таблиц (также здесь, на StackOverflow).

Единственное решение для вас - разработка с реальной учетной записью хранения вместо использования эмулятора.

person Sandrino Di Mattia    schedule 28.10.2012
comment
Это настолько распространенный сценарий, что, если эмулятор не может с ним справиться, это определенно должно быть ошибкой. Предварительный просмотр кеширования также постоянно приводит к утечке памяти. Эти инструменты разработчика нуждаются в любви Microsoft. - person w.brian; 29.10.2012
comment
Я только что потратил два дня на эту проблему. Я перемещаю данные из производства в разработку и потратил все это время, пытаясь понять, почему это не сработает. Раньше я заметил некоторую проблему, когда в моих данных было пространство, но я никогда не мог представить себе такую ​​распространенную проблему, как это могло бы существовать. Мне это кажется проблемой, которая потенциально может повлиять на каждого разработчика Azure. - person ; 09.11.2012

Эта проблема была исправлена ​​в более поздних версиях Windows Azure SDK. Установите последнюю версию, чтобы устранить проблему. http://www.windowsazure.com/en-us/downloads/

person Mike Fisher    schedule 26.09.2013