Ho due modelli (Utente e Gioco) Sono collegati da un altro modello chiamato PlayerID. Per l'istanza un utente può avere un ID speciale per ogni gioco. Mi piacerebbe impostare che un utente può avere solo un ID per ogni gioco. Qual è la migliore pratica per questo?
MODIFICARE:
Lo espanderò ulteriormente in modo da sapere esattamente cosa sto costruendo. Ho giocatori che giocano a giochi come Magic the Gathering o Pokemon ecc. Ognuno di questi giochi assegna gli ID dei giocatori. Quindi MTG ha numeri DCI e così via. Ogni giocatore avrà un ID per ogni gioco ma non più di uno per partita e ho bisogno di assicurarmi che i giocatori non possano avere più ID per lo stesso gioco.
public class PlayerID
{
public int PlayerID { get; set; }
public string GamePlayerID { get; set; }
public User User { get; set; }
public Game Game { get; set; }
}
Un giocatore può partecipare a più giochi, ma non può partecipare allo stesso gioco più di una volta.
Anche questo appartiene alla tua logica aziendale, ma puoi definire un vincolo per proteggerti dagli errori.
Hai bisogno di una relazione molti-a-molti nella tua logica:
public class Game
{
public int Id { get; set; }
public ICollection<GamePlayer> GamePlayers { get; set; }
}
public class Player
{
public int Id { get; set; }
public ICollection<GamePlayer> GamePlayers { get; set; }
}
public class GamePlayer
{
public int GameId { get; set; }
public Game Game { get; set; }
public int PlayerId { get; set; }
public Player Player { get; set; }
}
...
modelBuilder.Entity<GamePlayer>(e =>
{
// This safe-guards for duplicates.
e.HasIndex(prp => new { prp.GameId, prp.PlayerId }).IsUnique();
e.HasOne(prp => prp.Game).WithMany(prp => prp.GamePlayers).HasForeignKey(prp => prp.GameId);
e.HasOne(prp => prp.Player).WithMany(prp => prp.GamePlayers).HasForeignKey(prp => prp.PlayerId);
}