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

Entity Framework Discussion :

Pb réactualisation propriétés de Navigation


Sujet :

Entity Framework

  1. #1
    Membre habitué
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    258
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2011
    Messages : 258
    Points : 126
    Points
    126
    Par défaut Pb réactualisation propriétés de Navigation
    Bonjour,
    J'éprouve qq pb avec la réactualisation des propriétés de navigation (tables liées) sous EF 5.0 / Winform lié sur une base SQL Server
    J’ai :
    Une ClassePrincipale que je charge par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim QueryPrincipale = From c In ctx. ClassePrincipales Select c
    QueryPrincipale.Load()
    ClassePrincipaleBindingSource.DataSource = ctx. ClassePrincipale.Local.ToBindingList
    Cette ClassePrincipale est liée à une table de jonction dans SQL Server comprenant 4 champs
    IDJonction, IDClasseprincipale, IDClasseLiee1, IDClasseLiee2

    Dans le Form detail de Classe principale, j’aimerais afficher dans un ListView les Informations correspondantes contenues dans la Table de Jonction.
    Pour cela, j’ai fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Dim ListeCC As New List(Of MaClasse)
     
    Public Sub ChargementListViewCC()
    Dim QueryCC = From c In ctx.MaClasses Where c. IDClasseprincipale = IDClassePrincipaleEnCours Select c
    ListeCC = QueryCC.ToList
    If ListeCC.Count = 0 Then Exit Sub
     
    For Each cc In ListeCC
    Dim MyLine As ListViewItem = New ListViewItem(New String() {cc.IDJonction, cc.ClasseLiee1.Libelle, cc. ClasseLiee2.libelle})
    ListViewCC.Items.Add(MyLine)
    Next
    End Sub
    Le chargement s’effectue sans pb !


    J’ai ensuite fait une fonction delete
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub DeleteCC
    Dim CC As New Jonction
    CC = ctx.Jonctions.Find(IDAsupprimer)
    ctx.Jonctions.Remove(CC)
    ctx.SaveChanges()
    Call ChargementListViewCC()
    End Sub
    Pas de pb, la liste se met bien à jour !

    J’ai ensuite voulu faire une fonction Add
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Private Sub AddCC
    Dim NewCC as new Junction
    With NewCC
          .IDClasseprincipale = IDClassePrincipaleEncours
          .  IDClasseLiee1 = nouvelID1 ‘ valeur vérifiée auparavant
          .  IDClasseLiee2 = nouvelID2 ‘ valeur vérifiée auparavant
    End With
     
     
    ctx.Jonctions.Add(NewCC)
    ctx.SaveChanges()
    Call ChargementListViewCC() ‘ Pour recharger la liste
     
    End Sub
    Et là, pb :
    Une exception non gérée du type 'System.NullReferenceException' s'est produite
    Informations supplémentaires : La référence d'objet n'est pas définie à une instance d'un objet.

    Si je ferme le Form et que je l’ouvre de nouveau, le NewCC apparait bien dans le ListView !
    Juste après l’erreur, si je regarde la ListeCC elle contient bien le NewCC crée, avec les bonnes valeur d’ID , mais les ClasseLiee1.Libelle et ClasseLiee2.Libelle sont à Nothing
    Le fait de relancer la QueryCC n’a pas rechargé ces informations liées
    Comment forcer EF à les recharger ?

    Par avance, merci
    Bertrand

  2. #2
    Membre habitué
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    258
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2011
    Messages : 258
    Points : 126
    Points
    126
    Par défaut
    Re,
    J'ai continué mes recherches et trouvé des solutions, mais qui ne me "plaisent pas"

    Pour la fonction Add, si je réalise cette fonction dans un Form séparé, cela marche

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Private Sub AddCC
    Dim frm As New FormCCadd
    ' Ce FormCCadd est à base de DGV et enregistre une nouvelle ligne de Jonction
    frm.ShowDialog()
    ' ce ChargementListViewConception retrouve bien les libellés dans les tables liées 1 et 2
    Call ChargementListViewConception()
    End Sub
    Cette solution ne me plait pas car nécessite de recréer un Form ..


    Voila ce que j'ai fait :
    La Table liée1 ayant peu d'enregistrement, je l'ai chargée en local lors du Formload
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
            Dim QueryCL1 = From c In ctx.ClasseLiee1 Select c
            QueryCL1.Load()
    La table liée2 a par contre plusieurs milliers d'enregistrements
    j'ai donc modifié ma fonction Add comme ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    Private Sub AddCC
    Dim NewCC as new Junction
    With NewCC
          .IDClasseprincipale = IDClassePrincipaleEncours
          .  IDClasseLiee1 = nouvelID1 ' valeur vérifiée auparavant
          .  IDClasseLiee2 = nouvelID2 ' valeur vérifiée auparavant
    End With
     
    Dim NewCL2 As New TableLiee2
    NewCL2 = ctx.TableLiee2.Find(CC.nouvelID2)
    CL2BindingSource.Add(NewCL2)
     
    ctx.Jonctions.Add(NewCC)
    ctx.SaveChanges()
    Call ChargementListViewCC() ' Pour recharger la liste
    End Sub
    Cela marche, mais me semble trés lourd s'il y a avait 10 tables liées !
    Je ne comprends pas pourquoi, les entités liées sont rechargées si crées dans un autre Form (tout en ne fermant pas le Form en cours), et pas si crées dans le même Form
    Merci de vos lumiéres
    Bertrand

Discussions similaires

  1. propriétés de navigation dans GridView
    Par keryss dans le forum Entity Framework
    Réponses: 2
    Dernier message: 10/04/2011, 21h40
  2. Linq, Propriété de navigation et temps de réponse
    Par sephirostoy dans le forum Linq
    Réponses: 8
    Dernier message: 15/02/2011, 14h35
  3. Réponses: 5
    Dernier message: 08/10/2010, 15h34
  4. Propriété de navigation
    Par hech2007 dans le forum Diagrammes de Classes
    Réponses: 2
    Dernier message: 05/10/2010, 17h37
  5. [Linq to Sql] [C#] Propriété de navigation
    Par ClaudeBg dans le forum Accès aux données
    Réponses: 9
    Dernier message: 27/02/2009, 19h38

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