web-dev-qa-db-ja.com

データ損失が発生する可能性があるため、スキーマの更新を終了しています

私は通常、Lightswitchでアプリケーションをビルドしているときに行ったいくつかのミスが原因で発生するこのエラーにぶつかります。通常、関係に関連付けられています。私は通常、アプリを公開してエラーを表示する前に、さまざまなことを行っています。この時までに、私が間違ったことを計算することは困難です。このエラーをトレースして、テーブルで何を変更する必要があるかを確認する方法はありますか?

ネットSqlClientデータプロバイダー:メッセージ50000、レベル16、状態127、行6行が検出されました。データ損失が発生する可能性があるため、スキーマの更新を終了しています。

ありがとうございました。

28
Mark

このエラーは、(テーブルデザイナで)エンティティのプロパティに加えた変更により、パブリッシュされたデータベースのエンティティのテーブルが削除および再作成され、テーブルにデータが含まれている場合に発生します。これはSQL Serverの動作方法であり、LightSwitchの制御下にはありません。ただし、LightSwitchは注意を怠ってエラーを起こし、データが失われる可能性のある操作を許可しません。

これを引き起こす可能性のあるものの種類は次のとおりです。

  • 名前の変更プロパティ
  • 必須から不要などに変更する
  • プロパティのデータタイプの変更
  • &(私が正しく覚えていれば)プロパティのリストにあるプロパティのpositionを変更する

ただし、テーブルを削除して再作成することなく、プロパティのリストの最後にプロパティを追加できます。

アプリケーションを公開しようとする前に、あまりにも多くの変更を加えることは、あなたが提案する理由のために、実際には良い考えではありません。エンティティのプロパティに変更を加えた後、特に公開する必要があります。開発マシンのローカルSQL Serverインスタンス(SQL Expressを含む)に公開するだけの場合でも、運用サーバーに公開する前に変更を「テスト」します。

私がこれを回避した方法(以前はLSの固有データを使用していたが、ApplicationData-現在は添付データソースを使用しています)は、SSMS(SQL Server Management Studio)。次に、(潜在的な)データ損失を許可することを決定できます。ただし、whatを変更し、LightSwitchのプロパティに加えた変更と同じsameのみであることを確認してください。もちろん、変更を加える前にデータベースをバックアップしてください。データベースがLightSwitchと同期しなくなると、大きな問題が発生します。

16
Yann Duran

問題の手がかりとなる1つの項目はエラーメッセージにあります。たとえば、上記のエラーメッセージ[メッセージ50000、レベル16、状態127、行6]では、行6はビルドの一部である.publish.sqlファイルの行番号を参照しています。このファイルは、プロジェクトの/ bin/Debugサブディレクトリにあります。これはテキストファイルなので、任意のテキストエディターまたはVS2012でファイルを開いてファイルを表示し、エラーのある行番号を見つけることができます。

私の特定の問題では、不要になった列を削除していました。生成された.publish.sqlファイルで、変更中のテーブルの行をチェックするIF EXISTS行を見つけることができました。この変更によって、気になったデータが破壊されないことがわかっていたので、VS2012のIF EXISTS行をコメント化し、スクリプトを再度実行しました。変更は計画どおりに行われました。

注:この提案は、データを保護するために設置されている安全対策を無効にするものです。この変更は、問題がなければ、変更してください。 *

7
Paul