带有<“string”的F#构造函数,str>

时间:2016-09-12 02:33:04

标签: f#

In this article它显示了如何使用SqlCommandProvider类型。示例代码包含:

use cmd = new SqlCommandProvider<"
    SELECT TOP(@topN) FirstName, LastName, SalesYTD 
    FROM Sales.vSalesPerson
    WHERE CountryRegionName = @regionName AND SalesYTD > @salesMoreThan 
    ORDER BY SalesYTD
    " , connectionString>(connectionString)

类型构造函数名称前面的<... ,...>是什么意思,为什么呢? 第一个参数必须是字符串文字?它看起来像一个通用但它采取的变量不是类型。构造函数似乎正在接收<>部分中的连接字符串。

1 个答案:

答案 0 :(得分:3)

尖括号是类型的配置。 在您的示例中,您正在定义类型并以相同类型创建实例。当步骤分开时,它会更清楚。

定义类型。

type SalesPersonQuery = SqlCommandProvider<query, connectionString>

但实际上要创建一个类型的实例:

let command = new SalesPersonQuery()

现在您可以使用command.Execute()而不是SalesPersonQuery.Execute()

有一个构造函数的原因是因为稍后(在运行时)您可以将连接字符串更改为与定义中提供的连接字符串不同,例如:

let command = new SalesPersonQuery(differentConnectionString)

您可以在配置部分the documentation中找到:

  

可以在运行时通过构造函数可选参数

覆盖连接字符串

第一个参数可以是SQL脚本或SQL查询的路径。我想这就是它是一个字符串的原因:你想如何定义一个SQL查询?

再次,从文档:

  

命令文本(sql脚本)可以是文字或* .sql文件的路径