2009-04-24 8 views
1

Avec ce code, il n'y a pas de changement dans ma base de données. lorsque le code ci-dessus est exécuté, il n'y a plus de nouvelle entrée créée et aucune entrée n'est mise à jour.Update SubmitChanges() - ne met pas à jour

public void UpdateCallback(callback cb_) 
    { 
     callback call = context.callbacks.Single(c => c.callbackID == cb_.callbackID); 

      //call.callbackID = cb_.callbackID; 
      call.status = cb_.status; 
      call.contactName = cb_.contactName; 
      call.company = cb_.company; 
      call.phone = cb_.phone; 
      call.calledDate = cb_.calledDate; 
      call.callback1 = cb_.callback1; 
      call.notes = cb_.notes; 

     try 
     { 
      context.SubmitChanges(); 
     } 
     catch (Exception e) 
     { 
      Console.WriteLine(e); 
     } 
    } 

Répondre

4

Ce post est semblable à la vôtre. Dans son cas, la mise à jour ne fonctionnait pas car la table n'avait pas de clé primaire. Avez-vous vérifié que CallbackId est défini comme PK dans la base de données?

+0

J'ai eu ce problème, avec cette cause aussi. – Blorgbeard

+0

Par souci de clarté, ce n'est pas l'existence d'une clé primaire dans la base de données qui compte ici, mais si une ou plusieurs colonnes qui identifient des enregistrements de façon unique sont marquées comme clés primaires dans le concepteur Linq-to-SQL. En d'autres termes, même s'il n'y a pas de PK dans la base de données, les colonnes de marquage qui peuvent logiquement agir comme PK en tant que clé primaire sont suffisantes. – KristoferA

+0

.. vous pouvez le faire dans le concepteur? arg! – Blorgbeard

0

Rien d'immédiat ne me saute aux yeux. J'ai trouvé utile d'utiliser la propriété Log du DataContext pour voir le SQL en cours de génération.

Voir http://msdn.microsoft.com/en-us/library/system.data.linq.datacontext.log.aspx

Vous pouvez ensuite utiliser quelque chose comme le code ci-dessous pour la sortie SQL dans la fenêtre de débogage Visual Studio pendant le débogage.

/// <summary> 
/// Implementation of a <see cref="TextWriter"/> that outputs to the debug window 
/// </summary> 
public class DebugTextWriter : TextWriter 
{ 
    public override void Write(char[] buffer, int index, int count) 
    { 
     System.Diagnostics.Debug.Write(new string(buffer, index, count)); 
    } 

    public override void Write(string value) 
    { 
     System.Diagnostics.Debug.Write(value); 
    } 

    public override Encoding Encoding 
    { 
     get { return System.Text.Encoding.Default; } 
    } 
} 
Questions connexes