2014-01-15 18 views
2

是否可以使用F#中的類型提供程序訪問具有類型爲Geography的列的SQL Server 2008表?在F#中,如何使用Type Provider訪問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) 

在上面的代碼中,場GeoLocation中引用從SQL Server的地理數據類型。然而,我得到一個錯誤「成員或對象構造函數'LocationData'沒有參數或可設置的返回屬性'GeoLocation'。是否有另一種方法來引用這個字段,或其他一些接口,或者是這種數據類型根本不可訪問?

注意,我使用的Visual Studio 2012和.NET 4.5。

回答

0

您正在使用LinqToSql提供者,它沒有對SqlGeography類型的支持。請嘗試使用實體框架提供。

這裏是如何我參考了一個在我的項目中使用SqlGeography的數據庫:

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

對於大多數用途,LinqToSql和Entity Framework提供程序非常相似。主要區別在於實體框架提供程序將類型公開爲內部類型,而LinqToSql將事物公開。

如果由於某種原因,你寧願留在LinqToSql中,也有一些work-arounds可能允許你做你想做的事。

+0

謝謝。我通過添加插入/更新觸發器找到了另一個解決方法。請參閱rheitzman的答案,[鏈接](http://stackoverflow.com/questions/17684002/simple-update-trigger-simple-row-insert) – MichaelB

相關問題