Подтвердить что ты не робот

Обновление схемы завершается, поскольку может произойти потеря данных

Я продолжаю сталкиваться с этой ошибкой, которая обычно вызвана некоторой ошибкой, которую я сделал при создании приложения в Lightswitch. Обычно это связано с отношениями. Я публично продвигаюсь вперед и делаю несколько вещей, прежде чем опубликовать приложение и увидеть ошибку. К этому времени трудно определить, что я сделал неправильно. Есть ли способ отслеживать эту ошибку, чтобы увидеть, что мне нужно изменить в таблицах?

Поставщик данных Net SqlClient: Msg 50000, уровень 16, состояние 127, строка 6 Строки были обнаружены. Обновление схемы завершается, поскольку потеря данных может произойти.

Спасибо.

4b9b3361

Ответ 1

Эта ошибка возникает, когда изменение, внесенное вами в свойство entity (в конструкторе таблиц), приведет к удалению и воссозданию таблицы сущностей в опубликованной базе данных, а таблица имеет в ней данные. Это именно то, как работает SQL Server, но не под управлением LightSwitch. Тем не менее, LightSwitch ошибается со стороны осторожности и не допускает операции, которые могут вызвать потенциальную потерю любых данных.

Типы событий, которые могут вызвать это:

  • переименование свойства
  • изменение его от требуемого до требуемого и т.д.
  • изменение типа данных свойства
  • & даже (если я правильно помню), меняя положение свойство в списке свойств

Однако вы можете добавить свойство в конец списка свойств, не вызывая отбрасывание и воссоздание таблицы.

На самом деле не рекомендуется делать слишком много изменений, прежде чем пытаться опубликовать приложение, точно по той причине, по которой вы предлагаете - в конечном итоге не зная, что вы сделали. Вы особенно хотите опубликовать после внесения каких-либо изменений в свойства объекта. Даже если вы просто опубликуете на локальном экземпляре SQL Server (включая SQL Express) на своей машине разработки, чтобы "проверить" свои изменения перед публикацией на производственный сервер.

То, как я обошел это (когда я использовал все еще для использования внутренних встроенных данных LS, ApplicationData - теперь я использую подключенные источники данных), нужно вручную внести изменения в столбец самой базы данных, используя что-то вроде SSMS (SQL Server Management Studio). Затем вы можете разрешить (потенциальную) потерю данных. Будьте очень осторожны, хотя , что вы измените, и убедитесь, что это только тот же, что и изменение, внесенное вами в свойство в LightSwitch. Конечно, создайте резервную копию базы данных, прежде чем вносить в нее какие-либо изменения. Если вы нарушите синхронизацию базы данных с LightSwitch, у вас возникнут серьезные проблемы.

Ответ 2

В сообщении об ошибке содержится один вопрос, который является ключом к проблеме. Например, в сообщении об ошибке выше [Msg 50000, уровень 16, состояние 127, строка 6] строка 6 относится к номеру строки в файле .publish.sql, который является частью сборки. Этот файл можно найти в подкаталоге /bin/Debug вашего проекта. Поскольку это текстовый файл, вы можете открыть файл любым текстовым редактором или VS2012, чтобы просмотреть файл и найти номер строки с ошибкой.

В моей конкретной проблеме я удалял столбец, который мне больше не нужен. В файле .publish.sql, который был сгенерирован, мне удалось найти строку IF EXISTS, которая проверила строки в таблице, которую я изменял. Поскольку я знал, что это изменение не уничтожает данные, о которых я беспокоюсь, я просто прокомментировал строку IF EXISTS в VS2012, а затем снова выполнил script. Изменения произошли, как и планировалось.

Обратите внимание: это предложение защищает защитные меры для защиты ваших данных. Только сделайте это изменение, если вам комфортно это сделать. *