逐步解說:從 DBML 檔案產生 F# 型別 (F#)
當您將結構描述資訊的程式碼在 .dbml 檔案時, F# 的 3.0 逐步解說將說明如何建立資料型別從資料庫。 LINQ to SQL 使用這個檔案格式來表示資料庫結構描述。 您可以在 Visual Studio 中使用關聯的物件 (O/R 設計工具)去產生 LINQ to SQL 結構描述檔。 如需詳細資訊,請參閱O/R Designer Overview與Code Generation in LINQ to SQL。
資料庫標記語言 (DBML) 型別的提供者可以讓您撰寫根據資料庫結構描述的型別,而不需要在編譯時期指定靜態連接字串的程式碼。 這樣很有用,如果您需要考慮的可能性是最終的應用程式可以使用不同的資料庫、不同的認證或不同的連接字串。 如果您可以在編譯時期直接資料庫連接,而這是您在建置應用程式的最終會使用,您也可以使用 SQLDataConnection 型別提供者的相同資料庫和驗證。 如需詳細資訊,請參閱逐步解說:使用型別提供者存取 SQL 資料庫 (F#)。
這個逐步解說將說明下列工作: 在這個逐步解說的這個順序應該完成它們才會成功:
建立 .dbml 檔案
建立和設定 F# 專案
設定型別提供者
查詢資料庫
建立 .dbml 檔案
如果您不要測試的資料庫,請依照指示建立在 逐步解說:使用型別提供者存取 SQL 資料庫 (F#)底部。 如果您遵循這些指令,您將建立一個資料庫會包含一些簡單資料表和預存程序在 SQL Server 上 MyDatabase。
如果您已經有 .dbml 檔案,可以跳至區段中, 建立和設定 F# 專案。 否則,您可以使用命令列工具 SqlMetal.exe 建立 .dbml 檔案中重新命名現有 SQL 資料庫並。
您可以使用 SqlMetal.exe,建立 .dbml 檔案
開啟開發人員的命令提示字元。
請確定您可以存取 SqlMetal.exe 在命令提示字元中的輸入 SqlMetal.exe /? 。 SqlMetal.exe 通常會安裝在 Microsoft Sdk ] 資料夾中的 Program Files 或程式檔案 (x86)。
以下列命令列選項執行 SqlMetal.exe。 在 c:\destpath 位置替換一個適當的路徑中建立 .dbml 檔案,並插入資料庫執行個體名稱、伺服器和資料庫名稱的適當值。
SqlMetal.exe /sprocs /dbml:C:\destpath\MyDatabase.dbml /server:SERVER\INSTANCE /database:MyDatabase
注意事項 如果 SqlMetal.exe 建立檔案時因為使用權限發生問題。,請變更目前的目錄複製到您擁有寫入權限的資料夾。
您也可以查看其他可用的命令列選項。 例如,您可以使用選項,如果您要檢視 SQL 函式中包含產生的型別。 如需詳細資訊,請參閱SqlMetal.exe (程式碼產生工具)。
建立和設定 F# 專案
在這個步驟中,您會建立專案並加入適當的參考使用 DBML 型別的提供者。
建立並設定此專案
將新的 F# 主控台應用程式專案加入至方案。
在 [方案總管] 中按一下 [參考],然後在捷徑功能表中按一下 [加入參考]。
在組件區中,選擇Framework端,在組件名單中選擇 System.Data 和 System.Data.Linq 組件。
在組件區中,選擇架構端子,在組件名單中選擇 FSharp.Data.TypeProviders組件。
選擇確定按鈕,將這些組件的參考加入至您的專案。
(選擇性) 複製您在先前步驟中建立的 .dbml 檔案,並貼入您的專案的主要資料夾中。 這個資料夾包含專案檔 (.fsproj) 和程式碼檔。 在menu選單中,選擇[專案],[加入目前項目],然後指定 .dbml檔加入您的專案中。 如果您完成這些步驟,您可以略過下一個步驟中 ResolutionFolder 靜態參數。
設定型別提供者
在本節中,您會建立一種提供者並產生在 .dbml 檔案中所描述的結構描述型別。
設定型別提供者和產生型別
將開啟 TypeProviders 命名空間的程式碼和具現化要使用的 .dbml 檔案的提供者型別。 如果您已將 .dbml 檔案加入至專案中,您可以省略 ResolutionFolder 靜態參數。
open Microsoft.FSharp.Data.TypeProviders type dbml = DbmlFile<"MyDatabase.dbml", ResolutionFolder = @"<path to folder that contains .dbml file>> // This connection string can be specified at run time. let connectionString = "Data Source=MYSERVER\INSTANCE;Initial Catalog=MyDatabase;Integrated Security=SSPI;" let dataContext = new dbml.Mydatabase(connectionString)
DataContext 型別提供對所有產生的型別和從 DataContext繼承。 DbmlFile 型別提供者具有可設定的各種靜態參數。 例如,您可以為 DataContext 型別使用不同的名稱來指定 DataContext=MyDataContext。 在這種情況下,程式碼類似下列範例:
open Microsoft.FSharp.Data.TypeProviders type dbml = DbmlFile<"MyDatabase.dbml", ContextTypeName = "MyDataContext"> // This connection string can be specified at run time. let connectionString = "Data Source=MYSERVER\INSTANCE;Initial Catalog=MyDatabase;Integrated Security=SSPI;" let db = new dbml.MyDataContext(connectionString)
查詢資料庫
在本節中,您使用 F# 查詢運算式查詢資料庫。
查詢資料。
加入程式碼以查詢資料庫。
query { for row in db.Table1 do where (row.TestData1 > 2) select row } |> Seq.iter (fun row -> printfn "%d %s" row.TestData1 row.Name)
後續步驟
您可以繼續使用其他查詢運算式,或從資料內容取得資料庫連接並執行一般 ADO.NET 資料作業。 如需其他步驟,請參閱的一節,以「查詢資料>。 逐步解說:使用型別提供者存取 SQL 資料庫 (F#)之後。