2009-07-28 15 views
1

Entity Frameworkを使用して更新する外部キーフィールドを取得する適切な方法を見つけ出すのに問題があります。私はデータベースではなく、インターフェイス上でそれらを更新するのに問題はありません。ここで Entity Frameworkで通常フィールドとリレーショナルフィールドの両方を更新する

は私の質問 ファイルに関連するテーブルです:/// C:/Users/Mike/Desktop/RelevantTables.bmp

I「チーム」マスター/ディテール・タイプのビューでフォームを持っている(マスター= Team、detail = Player)、ListViewにプレーヤーを表示します。プレーヤーをダブルクリックすると、 "Edit Player"フォームが表示されます。ここで

は、私は私の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; 

は、これは私がやっているものです:

// 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); 
} 

私の問題はあります外部キーではないフィールドはすべてListViewの変更を反映しますが、PlayerPositionは反映されません。データベース内で正しく変更されています。毎回データベースを再クエリする必要はありますか?

私はWPFとEFを突き抜け始めたばかりなので、私はこれをすべてうまくやっているという独特の感触を得ています。

誰かが何が起こっているのかを知っているか、私がこの方法でやっていることがどんなに愚かであるか教えて欲しいと思うなら、それは私と一緒です!事前に

おかげで、 マイク

+0

申し訳ありません。これは私の初めてのStackOverflowへの投稿です!また、私はXAMLの{Binding Source}タグを使ってマスタービューとディテールビューにバインドしていることを忘れていました。 – mkgrunder

+0

ビットマップをアップロードできます。 www.tinypic.comを開き、ここにリンクを投稿してください。十分な評判を持つ人が投稿を更新できます:-) –

+0

もちろん、問題ありません。私はビットマップが問題に重要ではないと考えています。関連するedmxテーブルのキャプチャだけです。ここにリンクがあります:http://i31.tinypic.com/2u4mrmd.jpg – mkgrunder

答えて

1

私は、完全に遅れあまりにも疲れて、あるいはその両方です。私は両方に投票する! :)

これはちょうど私のBindingListCollectionView(PlayerView)のための非常に適切な名前のRefresh()メソッドを呼び出す、ちょうど1行のコードを必要としました。

ブロック場合は、次のようにだから私は単に私の編集プレイヤーを変更する:私は誰もがこの1にあまりにも多くの時間を費やしていない願っています

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

を。私は、データベースを単に更新するときに、非リレーショナルフィールドがなぜ更新されるのか完全にはわかりませんが、少なくとも今のところこれで動作します!

おかげで、私のビットマップを参照するための マイク

関連する問題