问题标签 [type-providers]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1478 浏览

f# - 将 F# 3.0 中的 Amazon WSDL Web 服务与类型提供程序一起使用

我使用内置的 WSDL 类型提供程序编写了以下 F# 3.0 程序,以自动生成 Amazon WSDL 的 F# 版本:

当我运行它时,我会在运行时从 Microsoft 工具堆栈中得到一个令人兴奋的内部异常:

从那以后,我发现这里有一个更新的模式:

但这并不能解决我令人兴奋的错误消息。有什么问题,我该如何解决?

0 投票
4 回答
2654 浏览

f# - F# 类型提供程序与 Lisp 宏

我一直在阅读有关 F# 3.0 类型提供程序(例如此处)的信息,它们似乎基于一种编译时代码生成。在这方面,我想知道它们如何与 Lisp 宏进行比较。似乎 F# 3.0 类型提供程序和 Lisp 宏都允许用户代码在编译时执行并引入编译器可用的新类型。任何人都可以阐明所涉及的问题和细微差别吗?

0 投票
1 回答
4220 浏览

f# - 如何创建可在 C# 中使用的 F# 类型提供程序?

如果我使用程序集 FSharp.Data.TypeProviders 4.3.0.0 中的 F# 类型提供程序,我可以在一个非常简单的 F# 库中创建类型。然后我可以使用这些类型而不依赖于程序集 FSharp.Data.TypeProviders。那是相当甜蜜的!这是一个例子:

我创建了一个名为 TryTypeProviders 的 F# 库项目。我把它放在.fs中:

然后我可以使用 C# 项目中的 F# 库:

我还没有找到任何关于如何创建这样的类型提供程序的工作示例。FSharpx.TypeProviders 中的类型提供程序无法从 C# 访问。我的猜测是它们是擦除类型而不是生成类型。我仍然有点模糊哪个是哪个,但它在这里定义为

  1. 生成的类型是嵌入到使用类型提供程序的程序集中的真实 .NET 类型(这是包装代码生成工具(如 sqlmetal)使用的类型提供程序)
  2. 擦除类型是在编译代码时由其他类型表示的模拟类型。

MSDN教程中提到的F# 3.0 示例包中的示例不适用于我。它们构建,但是当我尝试使用它们时,我得到了错误。

它最后一次发布是在 2011 年 3 月,我的猜测是它们还没有反映 Visual Studio 2012 附带的类型提供程序的最终版本。

F# Type Providers 看起来是一项很棒的技术,但我们需要帮助来构建它们。任何帮助表示赞赏。

0 投票
3 回答
477 浏览

.net - 使用类型提供程序而不是 t4 有什么好处吗?

据我所知,这两种工具都用于代码生成。使用 t4 生成的库可以在任何地方使用,而类型提供程序只能用于 F#,那么有什么意义呢?

0 投票
1 回答
1637 浏览

linq - 如何将 U 放入 F# Type Provider CRUD 中?

易于理解的 CRD 示例(创建、读取、删除)出现在 MSDN此处

页面上有一个很好的链接,指向创建测试数据库的脚本,我这样做了,并且很容易得到所有适用于 CRD 的示例。

CRD 页面上甚至还有方便的子标题:

(创建行)http://msdn.microsoft.com/en-us/library/hh361033.aspx#BKMK_UpdateDB

(读取行)http://msdn.microsoft.com/en-us/library/hh361033.aspx#BKMK_QueryData

(删除行)http://msdn.microsoft.com/en-us/library/hh361033.aspx#BKMK_DeleteRows

名为 BKMK_UpdateDB 的那个不做 CRUD 中的 U。它的名字是 Update,但它确实是 CRUD 中的 C。

如果我错过了此页面上 CRUD 中 U 的显示位置,请立即向我开枪并停止阅读...

请问这里的一位大师可以提供一点帮助吗?

为了减轻大师的垃圾工作量:下面的代码与 MSDN 网页上的代码非常相似。

只需运行网页上提到的 test-database-create .sql脚本,在下面的代码中为您的服务器和数据库名称编辑 SqlDataConnection 字符串,它应该可以正常运行。

请注意,我对查询所做的唯一更改是只更新一行。现在正好返回一行。似乎更重要的是看到一排的简单情况发生了变化。至少在一次显示多个更改之前是这样。

大师能否将最后 4 行更改为推荐的 F#-Type-Provider 方式以更改查询返回的数据,并将更改后的行写入数据库?

例如,将 row.TestData1 从 10 更改为 11 并将其写入数据库。

总结:MSDN 页面让我们 F#-Type-Provider 新手在 CRUD 中做 CRD 很容易。

大师可以请我们新手填写正确/简单的 F#-Type-Provider 方法来在 CRUD 中执行 U 吗?

非常感谢!

0 投票
1 回答
260 浏览

f# - F# 类型提供程序打印

我目前正在尝试SqlDataConnection类型提供程序,并且想知道如何显示这些类型。

有什么方法可以让我的调用printfn "%A"显示比类型名称更有意义的东西吗?

0 投票
2 回答
1333 浏览

wcf - F# wsdl 类型提供程序错误?

尽管我喜欢 F# 类型提供程序的想法,但我第一次认真尝试使用它们时失败了。

我打算通过以下方式连接到服务(WCF)WsdlService<"http://someurl/some.svc?wsdl">

它失败了:

类型提供程序 'Microsoft.FSharp.Data.TypeProviders.DesignTime.DataProviders' 报告错误:tmp6E6C.cs(9409,26): error CS0644: 'System.ComponentModel.PropertyChangedEventHandler' 不能从特殊类 'System.MulticastDelegate' c 派生:\Windows\Microsoft.NET\Framework\v4.0.30319\mscorlib.dll:(与先前错误相关的符号位置)

以及许多其他可能不相关的警告:

tmp6E6C.cs(290,28):警告 CS0436:“c:\Users\someuser\AppData\Local\Temp\tmp6E6C.cs”中的“System.Data.DataRowState”类型与导入的“System.Data”类型冲突。 'c:\Windows\Microsoft.NET\Framework\v4.0.30319\System.Data.dll' 中的 DataRowState'。使用 'c:\Users\someuser\AppData\Local\Temp\tmp6E6C.cs' 中定义的类型。tmp6E6C.cs(9427,17):(与先前警告相关的符号位置)

这是一个已知的功能;-) 还是我用错了?

不幸的是,我不能发布 WSDL,而且它相当大,里面有很多类型,所以我必须承认我有点懒惰,也没有把它删减。OTOH,如果我确实知道 WSDL 的哪一部分有问题或造成了这个错误,我当然会把它放在这里。

更改 WSDL 也不是一种选择,所以我主要想知道为什么 F# WSDL 类型的提供程序不能处理这个 (WCF) WSDL,或者我做错了什么。

当被 C# 和 VS2010 中的 svcutil.exe 使用时,它工作得很好。

我已经尝试了 WsdlTypeProvider 的所有参数,它们确实给出了相同的结果(当然 ForceUpdate 除外)。我是否应该使用 F# 以另一种方式使用这些服务?

==================================================== ============================添加信息(因为我是新手,不想回答。不要问为什么:):

谢谢大家的回答/评论。

我确实部分地这样做了(手动使用 svcutil)。正如我上面所说的,我尝试手动使用 svcutil,但在编译生成的 C# 代码时失败(在 F# 之外的库中)。

也就是说,我做了以下事情:

1) 通过在 VS 2010 GUI 中设置引用来创建合约。这按预期工作

2) 尝试使用命令行中的 svcutil 创建它。然后该文件的编译失败并出现相同的错误。

从我的角度来看,从 cmd-line 在 svcutil 中发生的情况以及从 GUI 添加相同服务时使用 svcutil(或使用的内容)不会生成具有相同参数的代码。我想这部分是由于我尝试使用的是 WCF 服务而不是“干净”的 WSDL/web 服务,并且类型提供程序假定我尝试使用“干净”的 web 服务。

我没有找到任何 svcutil 的参数来处理这个问题,或者任何可能的参数组合,并不是说我确实尝试了所有组合排列,而是尝试了可能基于(试图)深入阅读 svcutil 文档的组合(而且我不是从 cmd-line 使用它的新手)。

到目前为止,我得出的结论是 svcutil 的一些“缺失”参数导致了这种情况,并且 F# 类型提供程序没有错。我仍然非常想以某种方式解决它,仍然使用 F# 类型提供程序,但后备是通过 C# 中的 GUI 生成代码,然后再次在 F# 中引用该部分代码。这不是我试图实现的优雅解决方案,因为我确实有很多服务,而且我非常想创建一种很好的原型设计和测试这些服务的方式。

另一个后备当然也会放弃整个 F# 部分而只进行一些单元测试等,但这又违背了潜入 F# 并同时学习的目的;-)

0 投票
1 回答
1234 浏览

sql - 类中用于 SQL 的 F# 类型提供程序

我正在编写一个用于 Azure Worker 角色的 F#。我希望该类将连接字符串 a 作为参数。我创建了一个数据库连接

但是 dbSchema 是一种类型,因此它不能嵌入到我的类中(另一种类型)。我可以创建两个单独的模块,一个带有数据库连接,另一个带有我的班级

但是如何在我的类的构造函数中使用 connectionString 来创建连接?

0 投票
1 回答
1262 浏览

web-services - 用于 WSDL 和 BasicHttpBinding 的 F# 类型提供程序

当我在 C# 中使用 WSDL 服务时,我可以将两个参数传递给构造函数;BasicHttpBinding 和 EndpointAddress

当我在 F# 中使用 WSDL 类型提供程序时,我只允许在没有任何参数或使用 BasicHttpBinding 类型的一个参数的情况下调用构造函数。那么如何设置 MaxReceivedMessageSize 或 MaxBufferSize 等参数呢?

编辑:

如果我把它放到 Azure Worker 角色的 app.config

它没有帮助,我仍然得到 maxReceivedMessageSize 只有 64k 的异常,我应该更改它。我在 C# 中遇到了同样的问题,app.config 设置似乎被忽略了,所以我通过将带有这些设置的 BasicHttpBinding 传递给构造函数来解决它。

0 投票
2 回答
333 浏览

f# - 带有可移植库的 F# 类型提供程序

我正在构建一个 Windows 8 应用程序,并且发现自己想要包含一个ISO-4217代码列表,我在 XML 中拥有最新的形式。

当然,所有国家/地区都有一些这样的代码。我认为 Type Provider 非常适合。但是,由于它们发出代码,我不能将它们与便携式库一起使用。

如何编译类型提供程序以使其不使用发射,以便使用我拥有的 XML