Domanda

ho rinominato una tabella di un database di SQL Server 2008, da eL_CourseStepUserNotes a StepUserNotes. Ho rinominato la tabella utilizzando lo SSMA.

La tabella viene utilizzata in un ASP.NET 4.0 app. Io uso LINQ to SQL per tutti CRUD. Il problema è che il seguente codice:

    dbDataContext db = new dbDataContext();
    var k = (from c in db.StepUserNotes
             where ((c.CourseStepFK == q.CourseStepFK) && (c.UserFK == q.UserFK))
             select c).FirstOrDefault();
    try
    {
        db.StepUserNotes.InsertOnSubmit(q);
        db.SubmitChanges();
    }
    catch
    {

    }

non riesce sulla linea db.SubmitChanges, dicendo:

SqlException was caught. Invalid object name 'eL_CourseStepUserNotes'.

Vale a dire, il vecchio nome per la tabella ha ritorcersi contro di me.

Ho cancellato il vecchio file di LINQ to SQL dbml e ha creato uno nuovo. Ho cercato attraverso tutto il codice sorgente per le stringhe che contengono il vecchio nome della tabella. Niente. Il codice compila ...

In quale altro Posso guardare?

L'errore sta tornando da SQL Server, e utilizzando l'utilità della messa in vendita tutte le chiavi esterne in un database di SQL Server indicato nella domanda SO: sql:? necessità di cambiamento vincolo sulla tabella rinominare

rivela alcun segno del vecchio nome della tabella in FKS sia.

Sono ad una perdita completa di dove guardare o cosa provare successiva. Qualche suggerimento?

È stato utile?

Soluzione

Risposta:

Il problema, come affermato da Stu e Stark era un trigger. Stu mi ha dato l'SQL per eseguire che inchiodato il problema. Si è documentato qui nel caso qualcuno corre altro in questo modo:

Select Object_Name(ID) From SysComments 
       Where Text Like '%el_CourseStepUserNotes%'

Questo ha rivelato un trigger con il seguente nome:

tr_eL_CourseStepUserNotes

Il trigger fa riferimento il vecchio nome nel seguente modo:

SET DateAmended = CURRENT_TIMESTAMP
     FROM eL_CourseStepUserNotes PP  
            INNER JOIN inserted i  ON PP.UserNoteId = i.UserNoteId

Tutto sta lavorando di nuovo.

Sciocco me, avrei dovuto capire che un trigger è stato il problema come il primo errore ho ottenuto è stato relativi al settore DateAmended.

Non ho idea del motivo per cui un trigger dovrebbe aggiornare quando un nome di tabella è cambiato. Avevo controllato tutte le chiavi e le relazioni, ma ha dimenticato questo trigger.

In diretta e imparare.

Altri suggerimenti

Quando si ricreato il tuo LINQ to file SQL, ti sei ricordato di aggiornare il browser server per riflettere il cambiamento di nome della tabella prima?

Modifica -. Voglio dire il browser server di Visual Studio

è necessario associare nuovamente la classe LINQ to SQL, eliminare tutte le tabelle, quindi aggiungere di nuovo dal server Explorer

  1. Aprire il progetto in Visual Studio.
  2. aprire il file dbml.
  3. trovare la tabella appena stato rinominato.
  4. selezionare ed eliminarlo.
  5. Salva.
  6. Apri Esplora server.
  7. connettersi al database.
  8. Trova tavolo che è stato rinominato.
  9. Drag and drop nella finestra di progettazione del file dbml.
  10. Salva il file di nuovo.
  11. compilare il progetto.

Non è necessario eliminare le tabelle dal file DBML. Si può semplicemente aprire il progettista, clicca con il diagramma delle classi che rappresenta il tavolo e digitare il nuovo nome della tabella.

Tuttavia, se si sta ricreando da zero è importante aggiornare in Esplora server altrimenti sarà ancora tirare il vecchio nome dallo schema.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top