2014-01-15 4 views
2

F #의 유형 공급자를 사용하여 Geography 유형의 열로 SQL Server 2008 테이블에 액세스 할 수 있습니까? F #에서 형식 공급자를 사용하여 SQL Server Geography 데이터 형식에 액세스하려면 어떻게해야합니까?

type dbSchemaAnalyticsWeb = SqlDataConnection<"Data Source=sql2008;Initial Catalog=Analytics;User ID=USER;Password=PASSWORD;"> 

그런 다음 코드는 데이터 삽입 :

이 내 연결입니다 위의 코드에서

let dbAnalyticsSQL = dbSchemaAnalyticsWeb.GetDataContext() 

let sqlGeogBuild = new SqlGeographyBuilder() 
      sqlGeogBuild.BeginGeography(OpenGisGeographyType.Point); 
      sqlGeogBuild.BeginFigure(lat, long) 
      sqlGeogBuild.EndFigure() 
      sqlGeogBuild.EndGeography() 

      let LData = new dbSchemaAnalyticsWeb.ServiceTypes.LocationsData(
             Address = address, 
             ZipCode = zipCode,           
             Longitude = long, 
             Latitude = lat, 
             GeoLocation = sqlGeogBuild.ConstructedGeography) 

를 필드 지리적 위치는 SQL Server에서 지리 데이터 유형을 참조합니다. 그러나 "멤버 또는 개체 생성자 'LocationData'에 인수가 없거나 반환 할 수있는 속성 'GeoLocation'이 있습니다.이 필드 또는 다른 인터페이스를 참조 할 수있는 다른 방법이 있습니까? 아니면이 데이터 형식에 액세스 할 수 없습니까?

주, 나는 비주얼 스튜디오 2012과 닷넷 4.5을 사용하고 있습니다.

답변

0

당신은 SqlGeography 유형에 대한 지원이없는 LinqToSql 제공자를 사용하고 있습니다. 엔터티 프레임 워크 공급자를 사용하십시오.

방법은 다음과 같습니다있다 내 프로젝트 중 하나에서 SqlGeography를 사용하는 데이터베이스를 참조합니다.

type internal Database = SqlEntityConnection<ConnectionStringName="DefaultConnection", LocalSchemaFile="Context.ssdl", ConfigFile="Web.config", ForceUpdate=true, Pluralize=true> 

대부분의 경우 LinqToSql 및 Entity Framework 공급자는 매우 유사합니다. 주요 차이점은 Entity Framework 공급자가 형식을 내부로 노출하는 반면 LinqToSql은 항목을 공개로 공개한다는 점입니다.

LinqToSql을 사용하고 싶다면 원하는대로 할 수있는 일부 work-arounds이 있습니다.

+0

감사합니다. 삽입/업데이트 트리거를 추가하여 다른 해결 방법을 찾았습니다. rheitzman의 대답을 참조하십시오 [링크] (http://stackoverflow.com/questions/17684002/simple-update-trigger-simple-row-insert) – MichaelB