首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DbGeography与MySQL和EntityFramework

DbGeography与MySQL和EntityFramework
EN

Stack Overflow用户
提问于 2014-07-30 20:49:20
回答 2查看 1.7K关注 0票数 7

我正在使用来自DbGeographySystem.Data.Entity.Spatial;和实体框架与Server数据库。现在我切换到使用MySQL服务器,当我创建与DbGeography类型相关的数据库时,我收到了一个错误。

如何在不将所有域类属性更改为其他类型的情况下解决此问题?

代码语言:javascript
复制
public class Place
{
  ...
    public virtual int Id { get; set; }
    public string Name { get; set; }
    public DbGeography Location {get;set;}
  ...

}

我所犯的错误是:

代码语言:javascript
复制
System.NotSupportedException: There is no store type corresponding to the EDM type 'Edm.Geography' of primitive type 'Geography'.
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-06-22 16:49:22

我浏览了大量MySQL文档,发现MySQL5.x目前不支持DbGeography数据类型。

对于MySQL5.x,只支持DbGeometry。我很沮丧。

请参阅文档关于空间数据支持的MySQL正式文档

实体框架支持空间数据的两种主要类型: DbGeometry和DBGeography。第二个是连接器/网不支持的,因为MySQL服务器没有映射此类型的任何等效类型。因此,所有示例都将使用DbGeometry类型。

也许您可以使用DbGeometry数据类型点来保存经度和纬度,然后使用Haversine公式计算距离。

票数 4
EN

Stack Overflow用户

发布于 2018-03-20 08:11:42

正如ehe888所指出的,MySQL连接器/网不支持到DbGeography的映射,而是支持到DbGeometry的映射。

如果您只需要存储一个POINT (MySQL连接器/网在6.10版时支持的唯一几何图形),那么您可以轻松地在实体中自己完成DbGeographyDbGeometry之间的转换:

代码语言:javascript
复制
    [Column("gps_location")]
    public DbGeometry LocationGeometry { get; set; }

    [NotMapped] // Mapping to DbGeography is not supported by MySQL Connector/Net, see https://dev.mysql.com/doc/connector-net/en/connector-net-entityframework50.html
    public DbGeography Location
    {
        get => LocationGeometry != null ? DbGeography.FromBinary(LocationGeometry.AsBinary()) : null;
        set => LocationGeometry = value != null ? DbGeometry.FromBinary(value.AsBinary()) : null;
    }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25046665

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档