在 F# 中,如何使用 Type Provider 访问 Sql Server Geography 数据类型?
Posted
技术标签:
【中文标题】在 F# 中,如何使用 Type Provider 访问 Sql Server Geography 数据类型?【英文标题】:In F#, how can I access Sql Server Geography data type with Type Provider? 【发布时间】:2014-01-15 15:04:11 【问题描述】:是否可以使用 F# 中的类型提供程序访问具有地理类型列的 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。
【问题讨论】:
【参考方案1】:您正在使用 LinqToSql 提供程序,它不支持 SqlGeography 类型。尝试使用实体框架提供程序。
这是我在我的一个项目中引用使用 SqlGeography 的数据库的方式:
type internal Database = SqlEntityConnection<ConnectionStringName="DefaultConnection", LocalSchemaFile="Context.ssdl", ConfigFile="Web.config", ForceUpdate=true, Pluralize=true>
在大多数情况下,LinqToSql 和实体框架提供程序非常相似。主要区别在于实体框架提供者将类型公开为内部类型,而 LinqToSql 将其公开。
如果出于某种原因您更愿意继续使用 LinqToSql,则有一些 work-arounds 可能允许您做您想做的事情。
【讨论】:
谢谢。我通过添加插入/更新触发器找到了另一种解决方法。请参阅 rheitzman 的回答,link 这个包不支持dotnetcore以上是关于在 F# 中,如何使用 Type Provider 访问 Sql Server Geography 数据类型?的主要内容,如果未能解决你的问题,请参考以下文章
如何从外部应用访问另一个应用中的contentprovider
如何在 Flutter 中使用 Provider 正确获取 API
Angular 2 错误:无效的提供者 - 只允许提供 Provider 和 Type 的实例,得到:[object Object]
如何在 Python 中使用 Gtk.StyleContext.remove_provider()?