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