Web Api выставляют конкретный атрибут вместо внешнего ключа

Я новичок в C# и Entity Framework и имею следующую проблему.

У меня есть игрок и модель команды:

public class Player
{
    public int ID { get; set; }

    public string FirstName { get; set; }
    public string LastName { get; set; }
    public int TeamID { get; set; }
}

public class Team
{
    public int ID { get; set; }

    public string Name { get; set; }

    public virtual ICollection<Player> Players { get; set; }
}

Теперь я выставляю данные через остальные web api клиентам. Но когда я пытаюсь получить всех игроков, возвращается массив json, где команда игроков является идентификатором (внешним ключом) таблицы команд. Однако было бы неплохо вернуть название команды. Как я могу добиться этого элегантно?

{
ID: 7
FirstName: "Sidney"
LastName: "Crosby"
TeamID: 1
}

Но я бы хотел иметь

{
ID: 7
FirstName: "Sidney"
LastName: "Crosby"
TeamID: Denver Broncos
}

Контроллер Web Api выглядит так:

    public async Task<IHttpActionResult> GetPlayer(int id)
    {
        Player player = await db.Players.FindAsync(id);
        if (player == null)
        {
            return NotFound();
        }
        return Ok(player);
    }

1 ответ

Решение

Сначала измените свой класс игрока, чтобы он ссылался на родительскую команду, а не только на ID:

    public class Player
    {
        public int ID { get; set; }

        public string FirstName { get; set; }
        public string LastName { get; set; }
        public virtual Team Team { get; set; }
    }

Затем создайте объект DTO, чтобы отобразить нужные свойства в структуре, которую вы хотите:

    public class PlayerDto
    {
        public PlayerDto(Player player)
        {
            FirstName = player.FirstName;
            LastName = player.LastName;
            TeamName = player.Team.Name;
        }

        public string FirstName { get; set; }
        public string LastName { get; set; }
        public string TeamName { get; set; }
    }
Другие вопросы по тегам