#c_sharp #rest
Имеется 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)?
Ответы
Ответ 1
Вариант А: как уже было сказано в комментариях 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
Комментариев нет:
Отправить комментарий