我有一个这个模型:
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。
答案 0 :(得分:0)
这是全球化问题:小数点已保存到数据库但在读取时无法解析相同的几何数据,因为全球化需要小数点逗号(对于Double.TryParse()
)。快速解决方案是在web.config中将全球化设置为en-US,但如果您知道更好的解决方案,我会接受:)
<configuration>
<system.web>
<globalization uiCulture="en-US" culture="en-US"/>
...