我有两个模型(用户和游戏),它们通过另一个名为PlayerID的模型连接。例如,用户可以为每个游戏拥有一个特殊的ID。我想将其设置为每个游戏用户只能拥有一个ID。最佳做法是什么?
编辑:
我将进一步扩展它,以便您确切地知道我在构建什么。我有一些玩过《 Magic the Gathering》或《 Pokemon》等游戏的玩家。每个游戏都为其分配玩家ID。因此MTG具有DCI编号等等。每个玩家将为每个游戏拥有一个ID,但每个游戏都不能拥有一个ID,我需要确保玩家不能为同一游戏拥有多个ID。
public class PlayerID
{
public int PlayerID { get; set; }
public string GamePlayerID { get; set; }
public User User { get; set; }
public Game Game { get; set; }
}
答案 0 :(得分:3)
一个玩家可以加入多个游戏,但不能多次加入同一游戏。
这也属于您的业务逻辑,但是您可以定义约束以保护自己免受错误的侵害。
您的逻辑中需要多对多关系:
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);
}