c# – EF5,SQL Server,经度和纬度

我发现在sql Server中存储lat和long的最佳类型是十进制(9,6)(参考 What datatype to use when storing latitude and longitude data in SQL databases?),所以我做了
AddColumn("dbo.Table","Latitude",c => c.Decimal(nullable: false,precision: 9,scale: 6));
AddColumn("dbo.Table","Longitude",scale: 6));

sql似乎可以,一切正常,但是当我插入/更新一个值,即

lat = 44.5912853

它像这样保存:

44.590000

我检查了流程,就在更新之前,我的实体包含正确的值,所以我不认为是与我的代码相关,而是与EF / sql有关.你有什么想法可以避免吗?

UPDATE

update [dbo].[Breweries]
set [RankId] = @0,[Name] = @1,[Foundation] = null,[DirectSale] = @2,[Onlinesale] = @3,[StreetAddress] = @4,[StreetAddress1] = null,[ZIP] = @5,[City] = @6,[Province] = @7,[CountryCode] = @8,[Latitude] = @9,[Longitude] = @10,[PIVA] = null,[CodFiscale] = null
where ([BreweryId] = @11)

POCO实体

[Table("Breweries")]
public class Brewery : ABrewery 
{
  ....
  public decimal Latitude { get; set; }
  public decimal Longitude { get; set; }
}

sql Profiler

exec sp_executesql N'update [dbo].[Breweries]
set [RankId] = @0,[CodFiscale] = null
where ([BreweryId] = @11)
',N'@0 int,@1 nvarchar(128),@2 bit,@3 bit,@4 nvarchar(256),@5 varchar(16),@6 nvarchar(64),@7 nvarchar(64),@8 nvarchar(128),@9 decimal(18,2),@10 decimal(18,@11 int',@0=2,@1=N'Davide',@2=0,@3=0,@4=N'Via Moscardini,24',@5='zip',@6=N'city',@7=N'province',@8=N'ITA',@9=44.59,@10=11.05,@11=2

谢谢

解决方法

显然 this guy had the exact same problem这样解决了:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Entity<Activity>().Property(a => a.Latitude).HasPrecision(18,9);
    modelBuilder.Entity<Activity>().Property(a => a.Longitude).HasPrecision(18,9);
}

尽管您可能希望在sql Server 2008及更高版本中使用spatial data types(特别是geography).

相关文章

在要实现单例模式的类当中添加如下代码:实例化的时候:frmC...
1、如果制作圆角窗体,窗体先继承DOTNETBAR的:public parti...
根据网上资料,自己很粗略的实现了一个winform搜索提示,但是...
近期在做DSOFramer这个控件,打算自己弄一个自定义控件来封装...
今天玩了一把WMI,查询了一下电脑的硬件信息,感觉很多代码都...
最近在研究WinWordControl这个控件,因为上级要求在系统里,...