10

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

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

但是,当将代码提交到 SCM 并进一步让构建服务器执行其操作时,您可能不想使用相同的连接字符串,而是使用从构建过程生成的 SQL 服务器数据库的连接字符串。

这个问题有解决方案吗?

能够完成这项工作真是太好了,因为它将提供对数据库访问代码的编译时检查。

更新 @tomaspetricek 提出的解决方案效果很好,但我不得不在连接字符串中添加一个提供者名称:

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

1 回答 1

15

您当然可以使用配置文件中的键指定连接字符串(请参阅MSDN 文档):

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

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

F# 数据类型提供程序可以获取远程文件的 URL,但它们也可以获取本地文件。所以我认为应该总是有一种方法可以在不指定常量连接字符串(等)的情况下指定信息 - 但请随时询问特定的提供者。

于 2013-09-23T21:54:17.600 回答