2009-08-17 3 views
2

Je rencontre un scénario étrange et je cherche des moyens de comprendre ce qui ne va pas. J'ai un morceau de code qui insère une ligne dans une table - le genre de chose que j'ai fait dans des dizaines d'autres applications - mais le résultat final est que rien ne se passe à la fin de la base de données, et aucune erreur n'est générée. Comment puis-je savoir ce qui ne va pas?InsertOnSubmit ne déclenche pas l'insertion d'une base de données sur SubmitChanges

Voici mon code:

Partial Class MyDatabaseDataContext 

    Public Sub CreateEnrollee(subId, depId) 

     dim newEnrollee = New enrolee With {.subId = subId, .depId = depId} 

     Me.enrollees.InsertOnSubmit(newEnrollee) 
     Me.SubmitChanges() 

     dim test = NewEnrollee.id '<-- auto-incrementing key' 

    End Sub 

End Class 

Après SubmitChanges est appelé, aucune nouvelle ligne est créée, et "test" est égal à zéro. Aucune erreur n'est générée. Je ne sais pas pourquoi il n'essaie pas d'insérer la ligne. Des idées sur la façon de déboguer cela?

+0

Les champs qui stockent subId et depId ... autorisent-ils les valeurs nulles? Si non, y a-t-il des valeurs 0? – mattruma

+0

Ils n'autorisent pas les valeurs nulles, mais j'ai confirmé que les valeurs entrées sont bonnes. – gfrizzle

+0

Avez-vous exécuté un profileur SQL pour vous assurer que l'application communique réellement avec la base de données SQL? Si oui, quel est le SQL envoyé au serveur à partir de Profiler? – StevenMcD

Répondre

1

TROUVEZ-LE! Une partie de la mise au point que je l'ai fait pour d'autres questions comprenaient l'ajout d'une exploitation forestière à certaines des méthodes d'extensibilité:

Partial Private Sub InsertEnrollee(instance As Enrollee) 
End Sub 

Je pensais que « InsertEnrollee » existait donc je pourrais effectuer des actions à l'Enrollee a été inséré, alors j'ai ajouté le code journalisation ici et c'est là que les ennuis ont commencé. Maintenant, je devine que c'est ainsi que vous pourriez remplacer l'insert Enrollee et le faire vous-même si vous le souhaitez. Comme je remplaçais essentiellement le code de journalisation, c'est pourquoi rien ne se passait (du point de vue de la base de données).

+0

Je viens d'avoir ce problème exact, et pour la vie de moi, je n'ai pas pu trouver ce qui bloquait les insertions! En fait, ce comportement se produit même s'il n'y a pas d'implémentation dans votre stub de méthode partielle. – Dan

1

Vous pouvez activer la journalisation:

Me.Log = Console.Out; 

Vous pouvez vérifier la ChangeSet pour votre objet.

+0

Je l'ai fait, mais il ne montre aucune instruction, comme le contexte de données a déterminé qu'un insert n'était pas nécessaire ou possible ou quelque chose. (La journalisation affiche une instruction SELECT plus tôt dans mon code, donc je sais que cela fonctionne.) – gfrizzle

Questions connexes