【问题标题】:Can you read additional data strings from Web API POST which are not in the data model?您可以从 Web API POST 中读取不在数据模型中的其他数据字符串吗?
【发布时间】:2021-01-29 10:26:05
【问题描述】:

在实体框架中,我有一个 DBGeography 对象:

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

由于我还没有发现通过 JSON 发送 POINT 对象的更好方法,我打算从我的 Javascript 代码中发送“lat”和“lng”字符串值,并在 POST 期间在服务器上使用它们方法:

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 方法中使用,但实际上并未保存到我的数据库中?

【问题讨论】:

  • 我找到了这个答案,并相信它最初可能解决了问题stackoverflow.com/questions/33792793/…,但我很快意识到,在刷新数据库后,它只是为纬度和经度创建了额外的列......我希望通过仅在计算 Point() 对象后存储 DBGeography 值来避免。

标签: c# asp.net-web-api entity-framework-6 dbgeography


【解决方案1】:

这篇来自 Mohamed Badr & Niels R 的帖子 https://stackoverflow.com/a/35982194/3026149 和来自 haim770 的这篇帖子 https://stackoverflow.com/a/18215561/3026149 解决了我的问题。

我不知道有一个 [NotMapped] 属性可用于我的数据模型,这意味着我可以预期 lat 和 lng 的值,而无需让它们在 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);
        }

【讨论】:

    猜你喜欢
    • 2010-09-25
    • 2021-09-15
    • 1970-01-01
    • 2017-11-05
    • 1970-01-01
    • 1970-01-01
    • 2012-05-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多