是否可以使用F#中的Type Provider访问带有Geography类型列的SQL Server 2008表?
这是我的联系:
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引用了Geography数据类型。但是我得到一个错误“成员或对象构造函数'LocationData'没有参数或可设置的返回属性'GeoLocation'。是否有另一种方法来引用这个字段或其他一些接口,或者这种数据类型是不可访问的?
注意,我使用的是Visual Studio 2012和.Net 4.5。
答案 0 :(得分:0)
您正在使用LinqToSql提供程序,该提供程序不支持SqlGeography类型。尝试使用Entity Framework提供程序。
以下是我在一个项目中引用使用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可能会让你做你想做的事。