2009-08-27 9 views
3

J'utilise LINQ to SQL avec Sql Server Compact Edition 3.5 et VS2008.Pourquoi mon LINQ INSERTS ne persiste-t-il pas dans SQL Server CE 3.5?

J'ai une table très simple (Tokens) avec une clé primaire uniqueidentifier (TokenID) et deux autres champs nullables (UsedBy et UsedOn). J'essaie d'utiliser LINQ pour insérer de nouvelles lignes dans la table, mais pour une raison quelconque, elles ne persistent pas.

Voici mon code:

 var connectionstring = "Data Source=|DataDirectory|\\MyData.sdf"; 
     MyData db = new MyData(connectionstring) { Log = Console.Out }; 

     Tokens token = new Tokens { TokenID = Guid.NewGuid() }; 
     db.Tokens.InsertOnSubmit(token); 
     //db.GetChangeSet(); 
     db.SubmitChanges(); 

     var tokens = from t in db.Tokens 
        select t; 
     foreach (var t in tokens) 
     { 
      Debug.Print(t.TokenID.ToString()); 
     } 

Si je décommenter db.GetChangeSet(); Je peux voir l'insertion en attente et quand je les itérez et les imprimez dans la veuve de débogage, le nombre de jetons augmente à chaque fois. Mais si j'interroge la table dans VS (via Show Table Data) il est vide? Visualiser les données comme ceci "réinitialise" les jetons renvoyés par LINQ à leur état d'origine.

Je suis assez sûr que je fais une erreur simple, mais je ne peux pas le voir. Des idées?

+0

après la soumettre, vous devriez probablement utiliser un nouveau DataContext lorsque vous chargez les jetons si vous vouloir vérifier qu'ils peuvent vraiment être lus à partir de la base de données –

Répondre

5

Vérifiez que votre fichier DB n'est pas copié dans le répertoire de sortie à chaque version (dans la page de propriétés de l'élément de projet)

+0

Yup, c'était assez proche de la question que j'avais (voir ma réponse). –

3

Bien sûr, 5 minutes après avoir posté ma question, j'ai un énorme DUH! moment. Il s'avère que j'étais en train d'actualiser la base de données dans mon projet pour voir si les inserts persistaient alors que j'aurais dû vérifier \ bin \ Debug \ MyData.sdf à la place.

Faire confiance au code Sean, faites confiance au code. Oh, et rappelez-vous que vous êtes un idiot parfois.

+0

erreur classique, je l'ai fait aussi;) –

Questions connexes