Je continue à me heurter à cette erreur qui est généralement causée par une erreur que j'ai commise lors de la création d'une application dans Lightswitch
. Elle est généralement associée à des relations. Je progresse généralement et j'ai fait un certain nombre de choses avant de publier l'application et de voir l'erreur. À ce moment, il est difficile de calmer ce que j'ai fait de mal. Existe-t-il un moyen de remonter cette erreur pour voir ce que je dois changer dans les tableaux?
Fournisseur de données Net SqlClient: Msg 50000, niveau 16, état 127, ligne 6 Des lignes ont été détectées. La mise à jour du schéma se termine car une perte de données peut se produire.
Je vous remercie.
Cette erreur se produit lorsqu'une modification que vous avez apportée à la propriété d'une entité (dans le concepteur de table) entraîne la suppression et la recréation de la table de l'entité dans la base de données publiée et la table contient des données. C'est juste ainsi que SQL Server fonctionne, il n'est pas sous le contrôle de LightSwitch. Cependant, LightSwitch fait preuve de prudence et ne permet pas une opération qui pourrait entraîner la perte potentielle de données.
Les types de choses qui pourraient déclencher cela sont:
Vous pouvez cependant ajouter une propriété à la fin de la liste des propriétés, sans déclencher la suppression et la recréation de la table.
Ce n'est vraiment pas une bonne idée de faire trop de changements avant d'essayer de publier l'application, pour exactement la raison que vous suggérez - finir par ne pas savoir ce que vous avez fait. Vous souhaitez surtout publier après avoir apporté des modifications aux propriétés d'une entité. Même si vous venez de publier sur une instance SQL Server locale (y compris SQL Express) sur votre machine de développement, pour "tester" vos modifications avant de publier sur le serveur de production.
La façon dont je me suis débrouillé (quand j'utilisais encore les données intrinsèques de LS, ApplicationData - j'utilise maintenant des sources de données jointes) est de modifier manuellement la colonne de la base de données elle-même, en utilisant quelque chose comme SSMS (SQL Server Management Studio). Vous pouvez alors décider d'autoriser la perte (potentielle) de données. Soyez très prudent cependant quoi vous changez, et assurez-vous que ce n'est que le même que la modification que vous avez apportée à la propriété dans LightSwitch. Bien sûr, sauvegardez la base de données avant d'y apporter des modifications. Si vous faites que la base de données n'est pas synchronisée avec LightSwitch, vous aurez des problèmes majeurs.
Un élément qui est un indice du problème se trouve dans le message d'erreur. Par exemple, dans le message d'erreur ci-dessus [Msg 50000, niveau 16, état 127, ligne 6], la ligne 6 fait référence au numéro de ligne dans le fichier .publish.sql qui fait partie de la génération. Ce fichier se trouve dans le sous-répertoire/bin/Debug de votre projet. Puisqu'il s'agit d'un fichier texte, vous pouvez ouvrir le fichier avec n'importe quel éditeur de texte ou avec VS2012 pour afficher le fichier et trouver le numéro de ligne avec l'erreur.
Dans mon problème particulier, je supprimais une colonne dont je n'avais plus besoin. Dans le fichier .publish.sql généré, j'ai pu localiser la ligne IF EXISTS qui vérifiait les lignes de la table que je modifiais. Comme je savais que ce changement ne détruisait pas les données auxquelles je tenais, je viens de commenter la ligne IF EXISTS dans VS2012, puis d'exécuter à nouveau le script. Le changement a eu lieu comme prévu.
Remarque: cette suggestion remplace les dispositifs de sécurité en place pour protéger vos données. N'effectuez ce changement que si vous vous sentez à l'aise de le faire. *