Edu*_*rdo 5 geometry entity-framework odata asp.net-web-api
好的,我使用的是OData v4和WebApi 2.2,其中某些实体在坐标系统4674中设置了DbGeometry属性。假设我们有一个简单的实体,如下所示:
public class Aerodrome
{
public short Id { get; set; }
public string Name { get; set; }
public System.Data.Entity.Spatial.DbGeometry Location { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
和一个简单的ODataController如下:
public class AerodromeController : ODataController
{
private SqlDbContext Db
protected override void Initialize(HttpControllerContext controllerContext)
{
Db = new SqlDbContext();
base.Initialize(controllerContext);
}
[EnableQuery]
public IQueryable<Aerodrome> Get()
{
return Db.Aerodrome;
}
protected override void Dispose(bool disposing)
{
Store.Dispose();
base.Dispose(disposing);
}
}
Run Code Online (Sandbox Code Playgroud)
}
WebApiConfig设置如下
public static void Register(HttpConfiguration config)
{
ODataModelBuilder builder = new ODataConventionModelBuilder();
builder.EntitySet<Aerodrome>("Aerodrome");
config.MapODataServiceRoute("odata", null, builder.GetEdmModel());
}
Run Code Online (Sandbox Code Playgroud)
现在,几乎所有内容都看起来不错。我可以使用OData查询,例如host / Aerodrome?$ filter = startswith(Name,'Flor')“)或host / Aerodrome?$ top = 20&$ skip = 60”,这样可以得到预期的结果集。
但是,我只能使过滤器与geo。*过滤器一起工作。
主机/机场?$ filter = geo.distance(位置,要点(-72.768952 -7.599057))lt 900.0
它返回错误,如下所示:
"error":{
"code":"","message":"The query specified in the URI is not valid. ')' or ',' expected at position 59 in 'geo.distance(Localizacao,geography, Point(-122.03547668457 47.6316604614258)) lt 900'.","innererror":{
"message":"')' or ',' expected at position 59 in 'geo.distance(Localizacao,geography, Point(-122.03547668457 47.6316604614258)) lt 900'.","type":"Microsoft.OData.Core.ODataException","stacktrace":" em Microsoft.OData.Core.UriParser.Parsers.FunctionCallParser.ParseArgumentList()\r\n
Run Code Online (Sandbox Code Playgroud)
有人可以启发我做错了吗?
| 归档时间: |
|
| 查看次数: |
767 次 |
| 最近记录: |