none
Linq2SQL : données insérées dans le contetxe mais non sauvegardées en base RRS feed

  • Question

  • Bien le bonjour,

    Je débute en ce moment même en ASP.Net avec du C#.
    J'ai fait un petit projet console pour prendre les choses en main. Je dispose d'une petite base de données locale, et j'ai ajouté un fichier Linq2SQL de type DBML pour générer les entités et adapters de ma table en base de données.

    Ma table s'appelle "Films" et elle dispose :
    - d'un "id" clef primaire, auto-incrémenté
    - d'un "titre"
    - d'un "chemin", qui contiendra le chemin d'accès absolu vers le fichier film sur le serveur

    J'essaie alors de prendre en mains les possibilités offertes par les entités et adapters générés par mon objet DBML.
    J'utilise mon DataContext pour lister les données de la table "Films" : pas de soucis.
    Ensuite j'ajoute des films dans mon DataContext, et je demande à ce qu'il répercute les modifications sur la base de données : ça semble bien fonctionner, aucune exception n'est catchée.
    Enfin, je demande à nouveau à mon DataContext de lister les données de la table "Films" : là il m'affiche bien mes nouvelles données : parfait !

    Si j'exécute à nouveau mon projet, alors je m'aperçois que les données précédemment ajoutées ne sont pas sauvegardées en base... Comme si il fallait faire un COMMIT.

    Je ne comprends pas le soucis, pourriez-vous m'éclairer svp ?
    Merci !


    Code Snippet

    using System;

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;

    namespace MoviesManager
    {
    class Program
    {
    static void Main(string[] args)
    {
    // Création du DataContext en mémoire
    Linq2SQLDataContext FilmsDB = new Linq2SQLDataContext();

    // Liste les films actuellement en base de données
    // (Les données sont retrouvées et stockées dans le contexte mémoire)
    List<Films> listeFilmsAvantAjout = FilmsDB.Films.ToList();

    // Affichage de la liste des films en mémoire
    System.Console.WriteLine("Nombre de films trouvés : " + listeFilmsAvantAjout.Count);
    foreach (Films unFilm in listeFilmsAvantAjout)
    {
    System.Console.WriteLine(unFilm.id + " - " + unFilm.titre + " - " + unFilm.chemin);
    }

    // Création et ajout de films dans le datacontext en mémoire
    FilmsDB.Films.InsertOnSubmit(new Films { titre = "Titre film 1", chemin = "Chemin film 1" });
    FilmsDB.Films.InsertOnSubmit(new Films { titre = "Titre film 2", chemin = "Chemin film 2" });
    FilmsDB.Films.InsertOnSubmit(new Films { titre = "Titre film 3", chemin = "Chemin film 3" });

    // Insertion des films du DataContext (mémoire) dans la base de données
    // FilmsDB.SubmitChanges();

    try
    {
    FilmsDB.SubmitChanges();
    }
    catch (Exception ex)
    {
    System.Console.WriteLine();
    System.Console.WriteLine(ex.Message);
    System.Console.WriteLine();
    }


    // Liste les films actuellement en base de données
    // (Les données sont retrouvées et stockées dans le contexte mémoire)
    List<Films> listeFilmsApresAjout = FilmsDB.Films.ToList();

    // Liste les films actuellement en base de données
    System.Console.WriteLine();
    System.Console.WriteLine("Nombre de films trouvés : " + listeFilmsApresAjout.Count);
    foreach (Films unFilm in listeFilmsApresAjout)
    {
    System.Console.WriteLine(unFilm.id + " - " + unFilm.titre + " - " + unFilm.chemin);
    }

    System.Console.WriteLine();
    }
    }
    }


    dimanche 9 novembre 2008 15:12

Toutes les réponses

  • Bonjour,

     

    Est-il possible que vous puissiez m'envoyer le projet exemple qui pose problème par e-mail sur : gilles.tourreau@pos.fr ?

     

    Cordialement

     

    lundi 10 novembre 2008 20:01
    Modérateur
  • Bonjour et merci pour l'intérêt que vous portez à mon problème.
    J'ai souhaité vous envoyer l'e-mail en question, mais j'ai eu un retour comme quoi le message ne pouvait être délivré... Il semblerait que votre adresse ne soit pas reconnue !
    mardi 11 novembre 2008 14:27
  • Bonjour,

     

    Ré-essayez (vérifiez bien l'orthographe de mon adresse e-mail).

    Si cela ne passe pas toujours pas, ne m'envoyez pas de pièce jointe (pour un essai).

     

    Cordialement

     

    mardi 11 novembre 2008 14:32
    Modérateur