繁体   English   中英

获取实体框架以更新常规字段和关系字段

[英]Getting Entity Framework to update both normal and relational fields

我在弄清楚使用实体框架获取外键字段进行更新的正确方法时遇到了问题。 我在数据库中更新它们没有问题,但是在界面上更新它们没有问题。

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

我有一个具有主要/详细信息类型视图的“团队”表单(主要=团队,详细信息=玩家),并在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苦苦挣扎时,我有一种明显的感觉,我在所有这些方面做得都很差。

如果有人知道发生了什么事,或者只是想告诉我我这样做很傻,那对我很好!

预先感谢,迈克

我要么完全智障,要么太累了,要么都兼而有之。 我都投票! :)

这只需要一行代码,即为我的BindingListCollectionView(PlayerView)调用非常恰当命名的Refresh()方法。

因此,我只需要按以下步骤更改Edit Player即可:

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

我希望没有人花太多时间在这上面。 我不完全确定为什么当我简单地更新数据库时非关系字段确实会更新,但是现在它可以正常工作了,至少是这样!

谢谢,迈克

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM