存储有关用户的地理位置数据的正确类型是什么?我可以在DbGeography中存储准确度吗?

时间:2015-06-16 13:08:09

标签: c# asp.net-mvc geolocation entity-framework-6 asp.net-mvc-5.2

我得到LoginViewModel由一些双重组成,它们定义了世界上的用户位置:

public class LoginViewModel
{
    [Required]
    [EmailAddress]
    [Display(Name = "Email")]
    public string Email { get; set; }

    [Required]
    [DataType(DataType.Password)]
    [Display(Name = "Password")]
    public string Password { get; set; }

    [Display(Name = "Remember me?")]
    public bool RememberMe { get; set; }

    public double Latitude { get; set; }
    public double Longitude { get; set; }
    public double Accuracy { get; set; }

}

稍后我想将它们作为用户属性存储在数据库中。

我应该将它们存储为三个双打或另一个已经定义的类型:大概是ICollection<DbGeography>或定义ICollection我自己的类型Latitude, Longitude, Accuracy

1 个答案:

答案 0 :(得分:1)

不要担心如何将它们存储在数据库中,ORM / datalayer可以负责从数据库中存储和检索它们。

考虑一下如何在代码中使用它们。如果它们总是一起使用或相互关联,在你的情况下它们是两个点,那么你应该为它们创建一个类型。一个例子是System.Drawing.Point,你不想一直传递x和y坐标,并确保正确的x和y坐标一起传递。您只需创建一个点并使用它。

最后我个人会使用小数而不是双倍只是你要计算距离或使用lat的情况,将来计算时长。如果您有兴趣,decimal vs double! - Which one should I use and when?是一个很好的解释。

修改
正如SteveG在上面的评论中所说,最好使用的类型是在.Net 4.5中添加的DbGeography。