I would believe this simplified model could very well suit your needs:
The idea is to use the navigation properties to navigate between entities - from a business standpoint it makes sense for tournament matches to know what teams are involved, but from a data standpoint, it doesn't: when your application creates a new tournament, it also creates a TournamentMatchResult
for all teams involved, with each team's score at 0 - and that's enough for a TournamentMatch
to know what teams are playing.
As the game evolves, you can then update the TournamentMatchResult
records, and if a TournamentMatch
needs to know what teams are involved, it can easily find out by selecting its .TournamentMatchResults.Select(result => result.Team)
.
Notice this results in simple, easy-to-follow, one-to-many relationships everywhere.