2013-02-08 14 views
18

Continuo a riscontrare questo errore che è in genere causato da un errore che ho commesso durante la creazione di un'applicazione in Lightswitch. Di solito è associato alle relazioni. Mi sto muovendo di solito e ho fatto una serie di cose prima di pubblicare l'app e vedere l'errore. A questo punto è difficile calulare ciò che ho fatto di sbagliato. C'è un modo per rintracciare questo errore per vedere cosa ho bisogno di cambiare nelle tabelle?L'aggiornamento dello schema sta per terminare perché potrebbe verificarsi una perdita di dati

Provider di dati Net SqlClient: messaggio 50000, livello 16, stato 127, riga 6 Le righe sono state rilevate. L'aggiornamento dello schema sta per terminare perché potrebbe verificarsi una perdita di dati .

Grazie.

risposta

11

Questo errore si verifica quando un cambiamento che hai fatto alla proprietà di un'entità (nella finestra di progettazione tabella) causerebbe tabella dell'entità nel database pubblicato per essere caduto & ricreato, e la tabella contiene dati in esso. Questo è il modo in cui funziona SQL Server, non è sotto il controllo di LightSwitch. Tuttavia, LightSwitch aggira il lato della cautela, & non consente un'operazione che potrebbe causare la potenziale perdita di qualsiasi dato.

I tipi di cose che potrebbero innescare questo sono:

  • rinominare una proprietà
  • trasformandolo da necessaria-non necessaria ecc
  • cambiamento di una proprietà tipo di dati
  • & anche (se ricordo cor rettamente) cambiando la posizione di di una proprietà nella lista delle proprietà

È tuttavia possibile aggiungere un alloggio ai fine della lista delle proprietà, senza attivare la tabella di essere caduto & ricreato.

Non è davvero una buona idea apportare troppe modifiche prima di tentare di pubblicare l'applicazione, esattamente per il motivo che suggerisci - finendo per non sapere cosa hai fatto. In particolare, si desidera pubblicare dopo aver apportato modifiche alle proprietà di un'entità. Anche se si pubblica su un'istanza locale di SQL Server (incluso SQL Express) sul computer di sviluppo, per "testare" le modifiche prima di pubblicare sul server di produzione.

Il modo in cui mi sono aggrappato a questo (quando usavo ancora usare i dati intrinseci di LS, ApplicationData - ora utilizzo fonti dati allegate) è di apportare manualmente la modifica alla colonna nel database stesso, usando qualcosa come SSMS (SQL Server Management Studio). È quindi possibile decidere di consentire la (potenziale) perdita di dati. Sii molto attento però a cosa cambia, & assicurati che sia lo stesso come la modifica apportata alla proprietà in LightSwitch. Naturalmente eseguire il backup del database prima di apportare qualsiasi modifica ad esso. Se si causa la sincronizzazione del database con LightSwitch, si avranno problemi importanti.

+0

Ciao Yann, Quindi stai dicendo che non c'è modo di rintracciare la fonte dell'errore alla proprietà che lo sta causando? – Mark

+0

Non che io sappia, no. Ecco perché dico di pubblicare sempre subito dopo aver apportato modifiche a una proprietà. Se i tuoi dati non contano, puoi cancellare il database, e verrà ricreato quando pubblichi la prossima volta. Se i dati sono importanti, potrebbe essere necessario controllare manualmente le tabelle LightSwitch rispetto alle tabelle nel database. –

+0

Ciao Yann, i dati sono importanti. Non è probabile che riuscirò a trovare il problema controllando le tabelle Lightswitch rispetto al database. Tuttavia, posso ripristinare il database dal backup prima delle modifiche che sono così offensive. Posso farlo ed eliminare le nuove tabelle in Lightswitch che SQL ha trovato così offensivo? – Mark

4

Un elemento che è un indizio del problema è nel messaggio di errore.Ad esempio, nel messaggio di errore sopra [Msg 50000, Level 16, State 127, Line 6], Line 6 fa riferimento al numero di riga nel file .publish.sql che fa parte della build. Questo file può essere trovato nella sottodirectory/bin/Debug del tuo progetto. Poiché si tratta di un file di testo, è possibile aprire il file con qualsiasi editor di testo o con VS2012 per visualizzare il file e trovare il numero di riga con l'errore.

Nel mio particolare problema, stavo rilasciando una colonna che non avevo più bisogno. Nel file .publish.sql che è stato generato, sono stato in grado di individuare la riga IF EXISTS che ha controllato le righe nella tabella che stavo modificando. Poiché sapevo che questo cambiamento non stava distruggendo i dati a cui tenevo, ho appena commentato la riga IF EXISTS in VS2012, quindi ho eseguito di nuovo lo script. Il cambiamento è avvenuto come pianificato.

Nota: Questo suggerimento è prevalente guardie di sicurezza in atto per proteggere i dati. Apporta questo cambiamento solo se ti senti a tuo agio nel farlo. *

+0

buona idea! Grazie –