bonjour,

j'ai un soucis lors de la modification dans une GridView dont l'itemSource est une liste d'entités, à cette entité (MOUVEMENTS_DETAILS) j'ai inclus d'autres entités (exemple : MAGASINS) dont les clés sont des propriétés de navigation dans mon entité MOUVEMENTS_DETAILS

voilà comment la GridView est bindée :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
 
  </telerik:GridViewColumn>
                    <telerik:GridViewDataColumn Width="100" DataMemberBinding="{Binding ARTICLES.REF_ARTICLE, Mode=TwoWay}" Header="Réf Article" x:Name="leArticle" />
                    <telerik:GridViewDataColumn Width="*" DataMemberBinding="{Binding DESIGNATION, Mode=TwoWay}" Header="Désignation" />
                    <telerik:GridViewDataColumn Width="90" DataMemberBinding="{Binding QUANTITE, Mode=TwoWay}" Header="Quantité" />
                    <telerik:GridViewDataColumn Width="100" DataMemberBinding="{Binding MAGASINS.REF_MAGASIN, Mode=OneWay}" Header="Réf Magasin" x:Name="leMagasin" UniqueName="REF_MAGASIN" />
                    <telerik:GridViewDataColumn Width="90" DataMemberBinding="{Binding LOTS.DES_LOT, Mode=TwoWay}" Header="Réf LOT" x:Name="leLot" UniqueName="DES_LOT" />
                    <telerik:GridViewDataColumn Width="90" DataMemberBinding="{Binding PRIX_MOUVEMENT, Mode=TwoWay}" Header="Prix Achat" TextAlignment="Right" />
                    <telerik:GridViewDataColumn Width="100" DataMemberBinding="{Binding MT_LIGNE, Mode=TwoWay}" Header="Montant HT" IsReadOnly="True" TextAlignment="Right"/>
                </telerik:RadGridView.Columns>
maintenant dès que j'essaye de modifier la REF_MAGASIN par exemple ( je lui affecte une valeur choisi dans une liste a partir d'une autre fenêtre modale )
avec ce code :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
 
 void f_Closed(object sender, Telerik.Windows.Controls.WindowClosedEventArgs e)
   {
 MAGASINS mag = ((sender as TidjaraApplication.Liste.P_Fenetre_Liste).DS).MAGASINS.Where(m => m.ID_MAGASIN == myMagasins.id_magasin).FirstOrDefault();
                DomainContextExtensions.Detach((sender as TidjaraApplication.Liste.P_Fenetre_Liste).DS, mag);
                (((MOUVEMENTS_DETAILS)DetailsMouvementrRadGridView.CurrentCell.ParentRow.Item).MAGASINS).REF_MAGASIN = mag.REF_MAGASIN;
((MOUVEMENTS_DETAILS)DetailsMouvementrRadGridView.CurrentCell.ParentRow.Item).ID_MAGASIN = mag.ID_MAGASIN;           
       }
mais lorsque je fais ça la référence magasin change dans toute les autres ligne (MOUVEMENTS_DETAILS) qui pointent vers le même magasin !!
alors j'ai essayé de modifier tout l'objet magasin :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
               (((MOUVEMENTS_DETAILS)DetailsMouvementrRadGridView.CurrentCell.ParentRow.Item).MAGASINS)=mag;
mais ceci me renvoie cette erreur
An entity with the same identity already exists in this EntitySet.
!! je ne peux pas me contenter de modifier la clé étrangère par :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
((MOUVEMENTS_DETAILS)DetailsMouvementrRadGridView.CurrentCell.ParentRow.Item).ID_MAGASIN = mag.ID_MAGASIN;
les autres modification doivent apparaitre dans la GridView bindée !

j'ai compris par la suite que chaque ligne MOUVEMENTS_DETAILS n'a pas sa propre entité MAGASINS et que plusieurs pointent vers la même..

j'ai récupéré les lignes MOUVEMENTS_DETAILS avec cette requête :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
this.ObjectContext.MOUVEMENTS_DETAILS.Include("MAGASINS").Include("LOTS").Include("ARTICLES").Where(m => m.ID_MOUVEMENT == idMouvement);
dois je procéder autrement ??!!
j'espère que j'ai été claire

merci d'avance

j'ai oublié de préciser que je travaille avec Silverlight 4 , et que je suis débutante en Entity Framework !