2015-06-02 50 views
0

这是一个奇怪的。我试图通过MVC控制器将Google地图中的多边形保存到MS SQL中。问题是,我第一次做到这一点,它的工作原理,第二次它给我的错误:SQL DBGeography第二次插入失败

The incoming tabular data stream (TDS) remote procedure call (RPC) protocol stream is incorrect. Parameter 3 ("@2"): The supplied value is not a valid instance of data type geography. Check the source data for invalid values. An example of an invalid value is data of numeric type with scale greater than precision. 

我使用的EntityFramework 6.1.3,代码第一。下面的提交线出现错误:

var newPoly = new GenericPolygon() 
       { 
        Name = webShape.Name, 
        PolyShape = shapePolygon, 
        IsEnabled = true, 
        IsDeleted = false 
       }; 
       _unitOfWork.PolygonRepository.Add(newPoly); 
       _unitOfWork.Commit(); 

的SQL表结构相同,不同之处在于它具有一个int ID标识列,以及类,该名称是一个varchar(255)。 PolyShape列属于地理类型。

的shapePolygon变量的定义如下,与类添加只读属性称为“LongLat”,这是用于从谷歌的LatLong切换到MS LongLat格式:

var shapePolygon = DbGeography.PolygonFromText("POLYGON((" + webShape.LongLat + "))", 4326); 

的犯线本身调用数据库上下文保存方法(我使用UOW模式以减少代码):

this.context.SaveChanges(); 

我不能为我的生命弄清楚为什么它的工作原理一次,然后不再,除非我重新启动VS(在服务器上运行带有IIS Express - SQL 2008 R2 Enterprise的VS 2013) R)。

任何帮助或指针将:-)

回答

0

理解我似乎已经缩小的问题,并且同时它更是一个解决办法比的答案,这可能帮助别人。

问题是SQL Server的版本,即SQL 2008 R2 10.50.4000。我将数据库迁移到SQL Server 2012 build 11.0.5058,之后每次都运行代码。

希望这可以帮助别人!