让实体框架更新正常和关系字段

时间:2009-07-28 09:28:09

标签: c# wpf entity-framework foreign-keys

我在确定使用Entity Framework更新外键字段的正确方法时遇到了问题。我在数据库中更新它们没有问题,而是在界面上更新。

以下是我的问题的相关表格 文件:/// C:/Users/Mike/Desktop/RelevantTables.bmp

我有一个带有Master / Detail类型视图的“Team”表单(master = 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。

如果有人知道发生了什么,或者只是想告诉我这样做有多愚蠢,那对我来说没关系!

提前致谢, 麦克

1 个答案:

答案 0 :(得分: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();
}

我希望没有人在这个上花太多时间。当我只是更新数据库时,我不完全确定为什么非关系字段会更新,但它现在可以正常工作,这至少是一些东西!

谢谢, 麦克