gpt4 book ai didi

c# - Entity Framework Core - 唯一约束

转载 作者:行者123 更新时间:2023-11-30 21:31:22 24 4
gpt4 key购买 nike

我有两个模型(用户和游戏),它们由另一个名为 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; }

最佳答案

一个玩家可以加入多个游戏,但不能多次加入同一个游戏。

这也属于您的业务逻辑,但您可以定义一个约束来保护自己免受错误影响。

您的逻辑中需要多对多关系:

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);
}

关于c# - Entity Framework Core - 唯一约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53343631/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com