2009-07-28 54 views
1

我有一個問題找出正確的方法來獲取外鍵字段使用實體框架更新。我在數據庫中更新它們時沒有問題,而是在界面上更新它們。獲得實體框架來更新正常和關係字段

下面是相關的表我的問題 文件:/// C:/Users/Mike/Desktop/RelevantTables.bmp

我有一個「團隊」的形式與主/從類型視圖(主= Team,detail = Player),並在ListView中顯示玩家。當你雙擊播放器時,我會顯示「編輯播放器」表單。

這裏是我正在加載中我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 2009-07-28 09:42:35

回答

1

我要麼完全滯後,這樣太累了,或兩者兼而有之。我都投兩票! :)

這隻需要一行代碼,即爲我的BindingListCollectionView(PlayerView)調用非常恰當的Refresh()方法。

所以我簡單地改變我的編輯播放器,如果塊如下:

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

我希望沒有人花了太多時間在這一個。我不完全確定爲什麼非關係字段在我更新數據庫時會更新,但它現在起作用,至少是某種東西!

謝謝, 邁克