2017-07-14 10 views
0

データベースの地理位置の値を更新しようとしましたが、例外が発生しました。例外:オブジェクト・タイプSystem.Data.Spatial.DbGeographyから既知の管理対象プロバイダのネイティブ・タイプへのマッピングがありません

var requestUri = string.Format("http://maps.googleapis.com/maps/api/geocode/xml?address={0}&sensor=false", Uri.EscapeDataString(address)); 

var request = WebRequest.Create(requestUri); 
var response = request.GetResponse(); 
var xdoc = System.Xml.Linq.XDocument.Load(response.GetResponseStream()); 

var result = xdoc.Element("GeocodeResponse").Element("result"); 
var locationElement = result.Element("geometry").Element("location"); 
var latitude = locationElement.Element("lat"); 
var longitude = locationElement.Element("lng"); 
double lat = Double.Parse(latitude.Value); 
double lon = Double.Parse(longitude.Value); 

var geo = string.Format(CultureInfo.InvariantCulture.NumberFormat, "POINT({0} {1})", lat, lon); 

var geoLocation = DbGeography.PointFromText(geo, 4326); 
SqlCommand updationCommand = connection.CreateCommand(); 
updationCommand.CommandText = "Update Communications SET [GeoLocation][email protected] Where [Id] [email protected]"; 
updationCommand.Parameters.AddWithValue("@Id", row.Id);           
updationCommand.Parameters.AddWithValue("@GeoLoc", geoLocation); 
var param2 = updationCommand.CreateParameter(); 

Exeption - "オブジェクト型System.Data.Spatial.DbGeographyから既知の管理プロバイダ固有の型へのマッピングが存在しません。"

+0

デシベルであなたのジオロケーションのタイプが何であるかではより多くの情報をみては? – itikhomi

+0

公開DbGeography GeoLocation {get;セット; } – Jinesh

+2

updationCommand.Parameters.AddWithValue( "@ GeoLoc"、SqlGeography.Parse(geoLocation.AsText()));を試行します。 – itikhomi

答えて

1

DbGeographyはEFで使用するように設計されているため、DbGeographyの代わりにSqlGeographyを使用します。

SqlParameter p = new SqlParameter(); 
p.Name = "@GeoLoc"; 
p.Value = SqlGeography.Parse(geoLocation.AsText()); 
p.SqlDbType = SqlDbType.Udt; 
p.UdtTypeName = "geography"; 
updationCommand.Parameters.Add(p); 

にこのquestions

+0

別の例外があります。「UDTパラメータに対してUdtTypeNameプロパティを設定する必要があります。 – Jinesh

+0

@Jinesh、私は答えを更新しました – itikhomi

関連する問題