Имеется 2 таблицы:
Встреча (id, тема, idPlace).
Место (id, адрес). Связаны по полю idPlace->id.
Созданы модели для этих таблиц:
public class Place
{
public int Id { get; set; }
public string Address { get; set; }
}
public class Meeting
{
public int Id { get; set; }
public string Theme { get; set; }
public Place FPlace { get; set; }
}
Репозиторий:
public Meeting GetMeeting(int id)
{
using (var connection = new SqlConnection(_connectionString))
{
connection.Open();
using (var command = connection.CreateCommand())
{
command.CommandText = "SELECT m.id, m.theme,
p.address " +
"FROM [dbo].meeting AS m " +
"INNER JOIN [dbo].place AS p " +
"ON m.place_id = p.id " +
"WHERE m.id = @id";
command.Parameters.AddWithValue("@id", id);
using (var reader = command.ExecuteReader())
{
if (reader.Read())
{
return new Meeting
{
Id = (int)reader["id"],
Theme = (string)reader["theme"],
Time = (DateTime)reader["time"],
Duration = (TimeSpan)reader["duration"],
FPlace = new Place
{
Address = (string)reader["address"]
}
};
}
return null;
}
}
}
}
Ну и сам Rest:
[HttpGet]
[Route("api/meeting/get/{id}")]
public Meeting GetMeeting(int id)
{
return _repository.GetMeeting(id);
}
На мой взгляд, проблема кроется здесь
FPlace = new Place
{
Address = (string)reader["address"]
}
При GET-запросе (api/meeting/get/{id}) выдает не только данные из таблицы Встреча, адрес из таблицы Place, а еще и Id = 0(из таблицы Place).
Как бы от него избавиться (Id)?
Ответ
Вариант А: как уже было сказано в комментариях
public class Place
{
[IgnoreDataMember]
public int Id { get; set; }
public string Address { get; set; }
}
Вариант B
var meet = _repository.GetMeeting(id);
return new { id = meet.Id, theme = a.Theme, place = meet.FPlace.Address};
получается плоский список без излишеств
конечно неплохо было бы убедиться, что meet у нас не null
Комментариев нет:
Отправить комментарий