实体框架MySql:DbGeometry无法从DB读取

时间:2018-05-31 09:30:15

标签: mysql entity-framework

我有一个这个模型:

public partial class UserPosition
{
    ...
    public DbGeometry Position { get; set; }
    ...
}

我创建了这个对象并将其保存到MySql DB(db是我的DBContext):

var pos = new UserPosition
{
    ...
    Position = GeographyHelper.CreatePoint(request.Latitude, request.Longitude),
    ...
};

db.UserPositions.Add(pos);
db.SaveChanges();

GeographyHelper.CreatePoint:

/// <summary>
/// Creates a DbGeometry point from latitude and longitude values
/// </summary>
/// <param name="latitude"></param>
/// <param name="longitude"></param>
/// <returns></returns>
public static DbGeometry CreatePoint(double latitude, double longitude)
{
    var text = string.Format(CultureInfo.InvariantCulture.NumberFormat, "POINT({0} {1})", longitude, latitude);

    // 4326 is most common coordinate system used by GPS/Maps
    return DbGeometry.PointFromText(text, 4326);
}

该值完美保存到DB:

POINT (19.038934 47.531)

但是当我从DB读取值时,Position为null,其他字段都可以:

var rec = db.UserPositions.FirstOrDefault()

我得到了正确的记录,因为ID匹配。

为什么位置为空?

Visual Studio 2015 ,. NET 4.5.2,EntityFramework 6.2.0,MySql.Data.Entity.EF6 6.9.12,MySql数据库版本:5.6.15。

1 个答案:

答案 0 :(得分:0)

这是全球化问题:小数点已保存到数据库但在读取时无法解析相同的几何数据,因为全球化需要小数点逗号(对于Double.TryParse())。快速解决方案是在web.config中将全球化设置为en-US,但如果您知道更好的解决方案,我会接受:)

<configuration>
  <system.web>
    <globalization uiCulture="en-US" culture="en-US"/>
    ...