sql-server visual-studio-lightswitch

sql server - La actualización del esquema está terminando porque puede ocurrir una pérdida de datos



sql-server visual-studio-lightswitch (2)

Sigo tropezando con este error que generalmente es causado por algún error que cometí al crear una aplicación en Lightswitch . Por lo general se asocia con las relaciones. Normalmente me muevo y hago varias cosas antes de publicar la aplicación y ver el error. En este momento es difícil calcular lo que hice mal. ¿Hay alguna forma de rastrear este error para ver qué debo cambiar en las tablas?

Proveedor de datos de Net SqlClient: Msg 50000, nivel 16, estado 127, línea 6 Se detectaron filas. La actualización del esquema está terminando porque puede ocurrir una pérdida de datos.

Gracias.


Este error se produce cuando un cambio que ha realizado en la propiedad de una entidad (en el diseñador de la tabla) provocaría que la tabla de la entidad en la base de datos publicada se eliminara y volviera a crear, y la tabla tiene datos en ella. Esta es la forma en que funciona SQL Server, no está bajo el control de LightSwitch. Sin embargo, LightSwitch se equivoca por el lado de la precaución, y no permite una operación que pueda causar la pérdida potencial de datos.

Los tipos de cosas que podrían desencadenar esto son:

  • renombrar una propiedad
  • cambiándolo de requerido a no requerido, etc.
  • cambiando el tipo de datos de una propiedad
  • e incluso (si recuerdo bien) cambiando la posición de una propiedad en la lista de propiedades

Sin embargo, puede agregar una propiedad al final de la lista de propiedades, sin desencadenar que la tabla se descarte y vuelva a crear.

Realmente no es una buena idea realizar demasiados cambios antes de intentar publicar la aplicación, exactamente por la razón que sugieres: terminar sin saber lo que has hecho. Especialmente desea publicar después de realizar cambios en las propiedades de una entidad. Incluso si acaba de publicar en una instancia local de SQL Server (incluido SQL Express) en su máquina de desarrollo, para "probar" sus cambios antes de publicar en el servidor de producción.

La forma en que he resuelto esto (cuando solía usar los datos intrínsecos de LS, ApplicationData, ahora uso fuentes de datos adjuntas) es hacer el cambio manualmente a la columna en la base de datos, usando algo como SSMS (SQL Server Management Studio). A continuación, puede decidir permitir la pérdida de datos (potencial). Tenga mucho cuidado con lo que cambia y asegúrese de que sea igual al cambio que realizó en la propiedad en LightSwitch. Por supuesto, haga una copia de seguridad de la base de datos antes de realizar cambios en ella. Si hace que la base de datos no esté sincronizada con LightSwitch, tendrá grandes problemas.


Un elemento que es una pista para el problema está en el mensaje de error. Por ejemplo, en el mensaje de error anterior [Mensaje 50000, Nivel 16, Estado 127, Línea 6], la Línea 6 se refiere al número de línea en el archivo .publish.sql que forma parte de la compilación. Este archivo se puede encontrar en el subdirectorio / bin / Debug de su proyecto. Como es un archivo de texto, puede abrir el archivo con cualquier editor de texto o con VS2012 para ver el archivo y encontrar el número de línea con el error.

En mi problema particular, estaba eliminando una columna que ya no necesitaba. En el archivo .publish.sql que se generó, pude localizar la línea IF EXISTS que verificó las filas en la tabla que estaba modificando. Como sabía que este cambio no estaba destruyendo los datos que me importaban, solo comenté la línea IF EXISTS en VS2012 y luego ejecuté el script nuevamente. El cambio se produjo según lo previsto.

Tenga en cuenta: Esta sugerencia es anular los guardias de seguridad establecidos para proteger sus datos. Solo haz este cambio si te sientes cómodo haciéndolo. *