2013-09-23 93 views
7

F#類型提供者的類型定義通常需要一個常量表達式,例如, SQL類型提供:F#類型提供者和持續集成

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

然而,在提交代碼SCM的時候,並且還具有一個構建服務器做它的事,你可能不希望使用相同的連接字符串,而是連接字符串從構建過程中生成的SQL Server數據庫的一部分。

有沒有解決這個問題的方法?

能夠完成這項工作真的很棒,因爲它可以提供數據庫訪問代碼的編譯時檢查。

更新 通過@tomaspetricek提出的解決方案的工作非常出色,但我有一個供應商名稱添加到連接字符串:

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

如果該字符串來源於配置文件,情況會更好。 –

+0

@RobertHarvey事實上,這正是可以輕鬆完成的事情;-) –

回答

12

。當然您可以指定使用在一個關鍵的連接字符串配置文件(見MSDN documentation):

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

一般來說,一類供應商可能需要一些常量表達式,但我認爲最廣泛使用的人提供一種方式避免這一點。例如,SqlDataConnection可以從配置文件中讀取設置,其他標準F#類型提供程序允許指定LocalSchemaFile,以允許您在本地指定必要的結構(例如,針對SQL的*.dbml文件)。

F#數據類型提供程序可以將URL指向遠程文件,但也可以帶本地文件。所以我認爲應該總是有一種方法來指定信息,而不必指定一個常量連接字符串(等等) - 但隨意詢問有關特定的提供者。

+0

我用一個例子更新了這個問題。 – spacedoom