F# 类型提供程序与持续集成

11

F#类型提供程序的类型定义通常需要一个常量表达式,例如SQL类型提供程序:

type dbSchema = SqlDataConnection<"Data Source=MySqlServer;Initial Catalog=MyDatabase;">

然而,当提交代码到版本控制系统中,并且使用构建服务器进行构建时,可能不想使用相同的连接字符串,而是从构建过程生成的SQL Server数据库的连接字符串。

这个问题有解决方案吗?

如果能够实现这一点,那将非常好,因为它将为数据库访问代码提供编译时检查。

更新 @tomaspetricek提出的解决方案非常好,但我必须在连接字符串中添加提供程序名称:

<add name="DbConnectionString" providerName="System.Data.SqlClient" connectionString="Data Source=MySqlServer;Initial Catalog=MyDatabase;"/>

如果该字符串来自配置文件,则效果会更好。 - Robert Harvey
@RobertHarvey 确实,这很容易做到 ;-) - Tomas Petricek
1个回答

15

您可以使用配置文件中的密钥来指定连接字符串(请参见MSDN文档):

SqlDataConnection<ConnectionStringName="...", ConfigFile="app.config">

一般来说,类型提供程序可能需要一些常量表达式,但我认为大多数广泛使用的类型提供程序都提供了一种避免这种情况的方法。例如,SqlDataConnection可以从配置文件中读取设置,其他标准的F#类型提供程序允许指定LocalSchemaFile,以便在本地指定所需结构(例如,针对SQL的*.dbml文件)。

F# Data类型提供程序可以接受远程文件的URL,但它们也可以接受本地文件。因此,我认为总应该有一种方式可以指定信息而不必指定恒定的连接字符串等。但是,如果您有关于特定提供程序的问题,请随时问。


这个页面上的链接“请参阅演练:使用类型提供程序访问SQL数据库”肯定是损坏的:https://fsprojects.github.io/FSharp.Data.TypeProviders/sqldata.html - Pavel Voronin
现在它也应该支持appSettings和环境变量。;-) 实际上,我更喜欢有一些标准的“协议”,我需要在单独的程序集中实现这个协议,然后在TypeProvider中引用这个程序集。 - Pavel Voronin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接