Можете ли вы прочитать дополнительные строки данных из веб-API POST, которых нет в модели данных?

В Entity Framework у меня есть объект DBGeography:

using System.Data.Entity.Spatial;
...
public DbGeography Location { get; set; }

Поскольку я не нашел лучшего способа отправить объект POINT через JSON, я собираюсь отправить строковые значения «lat» и «lng» из моего кода Javascript и использовать их на сервере во время метода POST:

Снимок экрана из клиента POSTMan REST

public async Task<IHttpActionResult> PostI4Item(myEntity item)
        {
          var lat = (VALUE TO BE SOURCED);
          var lng = (VALUE TO BE SOURCED);
          string Point = String.Format("POINT({0} {1})", lat, lng);
          item.Location = DbGeography.PointFromText(Point, 4326);
          myEntity current = await InsertAsync(item);
          return CreatedAtRoute("Tables", new { id = current.Id }, current);
        }

Проблема в том, что я не знаю, как получить значения, отправленные в POST, которые не ожидаются в модели данных. item.Location доступен, потому что он был объявлен. Но даже если я отправляю дополнительные пары ключ/значение в теле 'lat' и 'lng', как я могу обнаружить эти значения в коде? Я не могу использовать item.lat и item.lng, поскольку они не объявлены, и мне не нужны дополнительные столбцы БД для этих значений... Я только хочу, чтобы они принимались в качестве входных данных, но не сохранялись.

Есть ли в модели данных метод, в котором я могу объявить значение (возможно, что-то доступное только для чтения или внутреннее), которое ожидается по запросу и доступно для использования в методе POST, но на самом деле не сохраняется в моей базе данных?


person kdpnz    schedule 29.01.2021    source источник
comment
Я нашел этот ответ и полагал, что он мог изначально решить проблему stackoverflow.com/questions/33792793/, но вскоре после обновления базы данных я понял, что он просто создает дополнительные столбцы для широты и долготы... что-то, что я надеясь избежать этого, сохраняя значение DBGeography только после вычисления объекта Point().   -  person kdpnz    schedule 31.01.2021


Ответы (1)


Этот пост https://stackoverflow.com/a/35982194/3026149 от Mohamed Badr & Niels R и этот пост < href="https://stackoverflow.com/a/18215561/3026149">https://stackoverflow.com/a/18215561/3026149 от haim770 - это то, что решило мою проблему.

Я не знал, что для моей модели данных был доступен атрибут [NotMapped], а это означало, что я мог ожидать значения широты и долготы без создания столбцов базы данных в Entity Framework.

Итак, мой класс становится:

using System.Data.Entity.Spatial;
using System.ComponentModel.DataAnnotations.Schema;
...
public DbGeography Location { get; set; }
[NotMapped]
public double lng { get; set; }
[NotMapped]
public double lat { get; set; }

И мой код становится:

public async Task<IHttpActionResult> PostI4Item(myEntity item)
        {
          var Point = DbGeography.FromText($"POINT({item.lng} {item.lat})");
          item.Location = Point;
          myEntity current = await InsertAsync(item);
          return CreatedAtRoute("Tables", new { id = current.Id }, current);
        }
person kdpnz    schedule 01.02.2021