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#