Question

J'ai renommé une table dans une base de données SQL Server 2008, de eL_CourseStepUserNotes à StepUserNotes. Je renomme la table en utilisant la SSMA.

Le tableau est utilisé dans une application ASP.NET 4.0. J'utilise LINQ to SQL pour tous CRUD. Le problème est que le code suivant:

    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
    {

    }

échoue sur la ligne db.SubmitChanges, en disant:

SqlException was caught. Invalid object name 'eL_CourseStepUserNotes'.

Ie, l'ancien nom de la table est revenue me hanter.

J'ai supprimé l'ancien fichier SQL LINQ à DBML et a créé un nouveau. Je l'ai cherché dans tout le code source pour les chaînes qui contiennent l'ancien nom de la table. Rien. Le code compile ...

Où puis-je regarder?

L'erreur revient de SQL Server, et en utilisant l'utilitaire pour lister toutes les clés étrangères dans une base de données SQL Server montré en question SO: sql: besoin de contrainte de changement sur la table de renommage

révèle aucun signe de l'ancien nom de la table dans FKs soit.

Je suis à une perte complète à où chercher ou quoi essayer la prochaine. Toutes les suggestions?

Était-ce utile?

La solution

Réponse:

Le problème, comme l'a déclaré Stu et Stark a été un déclencheur. Stu m'a donné l'instruction SQL pour exécuter cette clouée le problème. Il est documenté ici au cas où quelqu'un d'autre se heurte à ceci:

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

Cette étude a révélé un déclencheur avec le nom suivant:

tr_eL_CourseStepUserNotes

Le déclencheur fait référence à l'ancien nom comme suit:

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

Tout fonctionne maintenant à nouveau.

idiot moi, je me suis rendu compte qu'un déclencheur a été le problème que la première erreur que je suis était lié au champ DateAmended.

Je ne sais pas pourquoi un déclencheur mettrait à jour quand un nom de table a changé. J'avais vérifié toutes les clés et les relations, mais il a oublié ce déclencheur.

en direct et apprendre.

Autres conseils

Lorsque vous avez recréé votre fichier LINQ to SQL, avez-vous pensé à actualiser le navigateur du serveur pour refléter le changement de nom de la table d'abord?

Edit -. Je veux dire le navigateur serveur Visual Studio

vous devez rebind votre classe LINQ to SQL, supprimer toutes les tables, puis les ajouter à nouveau de l'explorateur serveur

  1. ouvrir votre projet en studio visuel.
  2. ouvrir votre fichier dbml.
  3. trouver la table que vous venez de renommer.
  4. sélectionner et supprimer.
  5. Enregistrer.
  6. Ouvrez l'Explorateur de serveurs.
  7. Connectez-vous à votre base de données.
  8. Trouvez la table que vous avez renommé.
  9. glisser-déposer sur le concepteur de votre fichier dbml.
  10. Enregistrer le fichier.
  11. Compile votre projet.

Il ne faut pas laisser tomber les tables de votre fichier DBML. Vous pouvez simplement ouvrir le concepteur, cliquez sur le diagramme de classes représentant votre table et tapez le nouveau nom de la table.

Cependant, si vous recréons à partir de zéro, il est important de vous rafraîchir dans l'Explorateur de serveurs sinon il sera toujours tirer l'ancien nom du schéma.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top