Entity Framework Core - уникальное ограничение - PullRequest
0 голосов
/ 16 ноября 2018

У меня есть две модели (пользователь и игра). Они связаны другой моделью с именем PlayerID. Для экземпляра пользователь может иметь специальный идентификатор для каждой игры. Я хотел бы установить, чтобы у пользователя был только один идентификатор для каждой игры. Какова лучшая практика для этого?

РЕДАКТИРОВАТЬ:

Я буду расширять его дальше, чтобы вы точно знали, что я строю. У меня есть игроки, которые играют в такие игры, как Magic the Gathering или Pokemon и т. Д. Каждая из этих игр назначает свои идентификаторы игроков. Так что у MTG есть номера DCI и так далее. У каждого игрока будет идентификатор для каждой игры, но не более одного для каждой игры, и я должен убедиться, что у игроков не может быть несколько идентификаторов для одной и той же игры.

public class PlayerID
{
    public int PlayerID { get; set; }

    public string GamePlayerID { get; set; }

    public User User { get; set; }

    public Game Game { get; set; }

}

1 Ответ

0 голосов
/ 16 ноября 2018

Игрок может присоединиться к нескольким играм, но не может присоединиться к одной и той же игре более одного раза.

Это также относится к вашей бизнес-логике, но вы можете определить ограничение, чтобы обезопасить себя от ошибок.

В вашей логике вам нужны отношения многие ко многим:

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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...