实体框架 MySql:DbGeometry 不从数据库中读取



>我有一个这个模型:

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);
}

该值完美保存到数据库:

POINT (19.038934 47.531)

但是当我从数据库中读取值时,位置为空,其他字段正常:

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.

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

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

最新更新