IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Presentation Foundation Discussion :

[DataContext / Linq SQL] Impossible d'ajouter une entité avec une clé déjà en cours d'utilisation


Sujet :

Windows Presentation Foundation

  1. #1
    Membre du Club
    Inscrit en
    Novembre 2010
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 27
    Points : 56
    Points
    56
    Par défaut [DataContext / Linq SQL] Impossible d'ajouter une entité avec une clé déjà en cours d'utilisation
    Bonjour,

    je travaille actuellement sur un logiciel qui fonctionne avec une base de données locale (compactSQL).

    J'utilise une DataGrid pour afficher certaines données de ma table "BT". Pour cela j'ai fais une List<BT> appelée BTs et j'ai ensuite mis le dataContext de ma DataGrid dessus.

    La liste est ensuite remplie à l'aide de la base de données ce qui met à jour la DataGrid. Un BT possède aussi une liste de Valeur. Dans le logiciel (ici le même UserControl), il est aussi possible d'ajouter une Valeur au BT, c'est là que le problème arrive.

    Lorsque j'essai d'ajouter une valeur au BT, j'ai le message d'erreur suivant au moment du bdd.submitChanges() :
    Impossible d'ajouter une entité avec une clé déjà en cours d'utilisation
    De ce que je comprends (et de ce que j'ai lu) c'est que Linq To SQL stocke pas mal de chose dans son cache, et la list<BT> doit être reliée à ce cache...

    Mon but est donc de détacher cette list (si j'ai bien compris le problème).

    Pour remplir ma liste, j'utilise une méthode chargerBT() qui renvoie une ObservableCollection<BT>, voici le code de cette fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    public ObservableCollection<BT> chargerBT()
            {
     
                ObservableCollection<BT> res = new ObservableCollection<BT>((from BT in bdd.BT
                                                                             orderby BT.Nom_BT
                                                                             select BT).ToArray().ToList());
     
                ObservableCollection<BT> tmp = new ObservableCollection<BT>(res);
     
                return tmp;
            }
    Au début je faisais simplement "return res;" mais j'avais le message d'erreur, avec cette version le message apparaît moins souvent.

    Avez-vous une solution à mon problème ?

    Merci d'avance


    EDIT : petite précision, je travaille en C#

  2. #2
    Membre expert
    Avatar de GuruuMeditation
    Homme Profil pro
    .Net Architect
    Inscrit en
    Octobre 2010
    Messages
    1 705
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : .Net Architect
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 705
    Points : 3 570
    Points
    3 570
    Par défaut
    A mon avis, c'est un problème de clé primaire. Celle-ci est probablement mal générée, et tu te retrouve avec 2 enregistrements avec la même clé => la DB est pas contente.

  3. #3
    Membre du Club
    Inscrit en
    Novembre 2010
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 27
    Points : 56
    Points
    56
    Par défaut
    Salut,

    bah en fait nan ce n'est pas un dédoublement de clef primaire. En effet j'avais au début mal fait ma génération de clef primaire pour le nouvel enregistrement et là j'avais le message d'erreur qui m'indiquait que cette clef était déjà présente.

    Je crois que le problème est que la nouvelle Valeur référence un BT_Valeur correspondant à un BT référencé dans le DataContext.

    Je voulais essayer de détacher le DataContext du Linq To SQL avec la méthode clone() mais celle-ci n'existe pas.

Discussions similaires

  1. Réponses: 1
    Dernier message: 13/04/2015, 11h17
  2. Réponses: 0
    Dernier message: 25/04/2012, 18h35
  3. [XL-2002] Macro de comparaison d'une cellule d'une feuille avec une cellule d'une autre feuille.
    Par steelydan dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 08/09/2010, 12h59
  4. Réponses: 4
    Dernier message: 15/10/2009, 13h33
  5. Ajouter des champ dans une table avec une procedure sp
    Par Abdou1 dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 26/07/2006, 18h32

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo