我正在使用类型表达式:
type dbSchema = SqlDataConnection<ConnectionStringName="X1", ConfigFile="App.config">
Run Code Online (Sandbox Code Playgroud)
这在编译时非常有效(我可以完全访问所有数据库类型),但它在运行时失败.我认为这是因为在控制台应用程序的bin目录中生成的配置文件被命名为其他内容,例如MyAppName.exe.config,因此App.config找不到该文件.
当然,对于使用的ASP.NET MVC类型的应用程序,web.config没有问题,因为编译和运行时配置文件名是相同的.
幸运的是,App.config在bin目录中放置副本确实可以解决问题,但这是我们应该做的吗?有什么想法吗?
F#类型提供程序的类型定义通常需要常量表达式,例如对于SQL类型提供程序:
type dbSchema = SqlDataConnection<"Data Source=MySqlServer;Initial Catalog=MyDatabase;">
Run Code Online (Sandbox Code Playgroud)
但是,在将代码提交给SCM并进一步让构建服务器执行其操作时,您可能不希望使用相同的连接字符串,而是使用从构建过程生成的SQL Server数据库的连接字符串.
有这个问题的解决方案吗?
能够完成这项工作真的很棒,因为它可以提供数据库访问代码的编译时检查.
更新 @tomaspetricek提出的解决方案非常有效,但我必须在连接字符串中添加提供程序名称:
<add name="DbConnectionString" providerName="System.Data.SqlClient" connectionString="Data Source=MySqlServer;Initial Catalog=MyDatabase;"/>
Run Code Online (Sandbox Code Playgroud) 有没有办法从App.Config文件中为F#中的Linq-To-Sql数据提供程序提供连接字符串.
我试过以下只是为了测试:
let mutable connString = @"Data Source=PCSQLEXPRESS;Initial Catalog=NortwindDB;Integrated Security=True"
type SqlConnection = SqlDataConnection<ConnectionString = connString>
Run Code Online (Sandbox Code Playgroud)
但我收到一条错误消息"这不是一个常量表达式或有效的自定义属性值"
谢谢