2009-07-28 6 views
1

J'ai un problème pour trouver la bonne façon de mettre à jour les champs clés étrangers en utilisant Entity Framework. Je n'ai pas de problème à les mettre à jour dans la base de données, mais plutôt sur l'interface.Obtention d'Entity Framework pour mettre à jour les champs normaux et relationnels

Voici les tableaux pertinents à ma question file: /// C: /Users/Mike/Desktop/RelevantTables.bmp

J'ai une forme "équipe" avec une vue de type maître/détail (maître = Team, detail = Player), et montre les joueurs dans un ListView. Lorsque vous double-cliquez sur un joueur, je montre le formulaire "Edit Player".

Voici comment je charge les données dans mon cas TeamForm Window_Loaded:

var TeamQuery = from t in ScoresDB.Team 
    .Include("School").Include("TeamLevel").Include("Player.PlayerPosition") 
    .Where(x => x.TeamID == TeamID) 
    select t; 

TeamData = new TeamCollection(TeamQuery, ScoresDB);      

TeamViewSource = (CollectionViewSource)FindResource("TeamViewSource"); 
PlayerViewSource = (CollectionViewSource)FindResource("PlayerViewSource"); 
TeamViewSource.Source = TeamData; 

TeamView = (ListCollectionView)TeamViewSource.View; 
TeamView.CurrentChanged += new EventHandler(TeamView_CurrentChanged); 

PlayerView = (BindingListCollectionView)PlayerViewSource.View; 

C'est ce que je fais lorsque l'utilisateur souhaite modifier un joueur:

// If the user made changes to the player, then refresh our view 
if (PlayerForm.EditPlayer(SelectedPlayer.PlayerID)) { 
    ScoresDB.Refresh(System.Data.Objects.RefreshMode.ClientWins, PlayerView); 
} 

Mon problème est Bien que chaque champ qui n'est pas une clé étrangère reflète les changements dans ListView, ce n'est pas le cas de PlayerPosition. Il est correctement changé dans la base de données. Ai-je besoin de réexaminer la base de données à chaque fois? J'ai le sentiment que je fais tout cela assez mal car je commence à peine à traverser WPF et EF.

Si quelqu'un a une idée de ce qui se passe ou souhaite simplement me dire à quel point je suis stupide de le faire de cette façon, c'est bien pour moi!

Merci à l'avance, Mike

+0

Désolé pour la référence à mon bitmap. C'est ma première fois sur StackOverflow! J'ai également oublié de mentionner que je suis lié aux vues Master et Detail en utilisant les balises {Binding Source} dans mon XAML. – mkgrunder

+0

Vous pouvez télécharger votre bitmap, par exemple. www.tinypic.com et ensuite poster le lien ici - quelqu'un avec assez de réputation peut alors mettre à jour votre message :-) –

+0

Bien sûr, pas de problème. Je ne pense pas que le bitmap est critique à la question, juste une capture des tables d'edmx appropriées. Voici le lien: http://i31.tinypic.com/2u4mrmd.jpg – mkgrunder

Répondre

1

Je suis soit complètement retardé, trop fatigué, ou les deux. Je vote les deux! :)

Cela nécessitait exactement une ligne de code, à savoir appeler la méthode Refresh() très bien nommée pour mon BindingListCollectionView (PlayerView).

Je change simplement mon Modifier le joueur si le bloc comme suit:

if (PlayerForm.EditPlayer(SelectedPlayer.PlayerID)) { 
    ScoresDB.Refresh(System.Data.Objects.RefreshMode.ClientWins, PlayerView); 
    // Added this line and it works 
    PlayerView.Refresh(); 
} 

J'espère que personne ne passait trop de temps sur celui-ci. Je ne suis pas tout à fait sûr pourquoi les champs non relationnels se mettent à jour quand je mets simplement à jour la base de données, mais cela fonctionne maintenant donc c'est au moins quelque chose!

Merci, Mike

Questions connexes