搜尋此網誌

2022年10月17日 星期一

ASP dbml 產生自訂程式碼

緣起:


    我今天在上班時又不知道要幹啥了,早上有去問我的主管說,我可以幫什麼忙,他說,他會跟專案經理討論後再給我工作。我上午邊寫 blog 邊等,沒等到任務派下,到現在已經下午了,我卻什麼東西都沒做,心裡有些緊張,我總不能這樣一直混下去,有夠難看的,但又不想要漫無目的的看著專案的程式碼,後來想到,有個東西是我想認識的,而且跟我們的專案很有關系,就是 linq to sql 的工具。

    我們的專案在使用資料庫時,它好像都是使用功具生成一個相對應的類別,再對每個生成的資料表寫一個與之對應的類別來擴充方法 (partial 類別),接下來想要對某個資料表做存取時,只要在程式裡新增相對應的實體並呼叫方法就能對資料表做存取,非常的方便。

    在這邊我想要實作整個流程,創造自己的資料庫 -> 生成 dbml -> 生成 C# class -> 用生成的 class 存取資料庫。我現在還是對整個 .NET 框架的資料庫使用超模糊的,我甚至講不太清楚我在用的框架技術叫啥名字 (好像是 ADO.NET 吧),所以,我就盡量只記錄自己的操作跟結果,其它部份應該是多講多錯 = =。


資料庫與 linq to sql:


    看一下我筆電上現在有的資料庫,我有安裝 SQLEXPRESS 跟 SQL Server Management Studio,並且有個叫 ABC 的資料庫,裡面有張叫 Customer 的資料表,連結伺服器使用的認證是 Windows 驗證,這樣就不需要在資料庫裡新增一個帳戶了,連線時告訴資料庫你使用的是 Windows 驗證就能直接連上 


    再來是 Visual Studio 那邊的準備,開啟 Visual Studio Installer,修改你安裝的 Visual Studio,點選 ASP.NET 與網頁程式開發


    在右邊的各別元件裡可以看到 LINQ to SQL 的選項,把它給打勾並按下修改,它就會安裝那些工具了


生成 DBML 檔:


    開啟 Visual Studio,我建立的是一個 Console 專案,並在專案裡新增一個資料夾,dbml 到時就放那邊


    再來要使用我們剛剛裝的 LINQ to SQL 的工具,生成 dbml 的教學在這邊,它的指令長這樣


    server 的名字可以在 SQL Server Manager Studio 的物件總管理,對你連線的主機點右鍵,查看它的屬性,名稱那欄就是了


    至於指令要在哪輸入 ? 我是直接在 Visual Studio 的專案裡開啟終端機,並在上面輸入。可以按 "檢視" -> "終端機" 來開啟終端機畫面


    成功後,去你專案資料夾的位置看,就能看到那份 dbml 檔,直接把它拖到我們專案的 TestDB 資料夾裡就行。指令的那個 /dbml: 參數,除了指定 dbml 檔的名字外,還能指定檔案的存放點,如果想放在 D 槽下的話,可以改成 /dbml:D:\ABC.dbml

那個 dbml 檔還能展開,有兩個檔案

    點進那個 ABC.designer.cs 檔,可以看到,它幫我們生成的這個檔案,裡面的類別對應了我們那個 ABC 資料庫裡所有的資料表 (我那資料庫只有一張表)

都有對應的欄位

    每個欄位也都有 public 方法讓你存取,它都自動幫你生成好了



連接資料庫:


    再來就是使用那個產生的類別來對我們的資料庫做存取,我觀察到,那個生成的類別有這麼一個 constructor


    裡面傳入的 stirng 是 connection string,這邊有 connection string 的介紹。string 裡最重要的三個參數是 Data Source - 要連接的資料庫主機,Initial Catalog - 要使用的資料庫,Integrated Security - 嗯...,這東西好像可以指定是不是用 Windows 認證登入,如果它是 false 的話,就必須輸入資料庫的帳密。用 = 指派參數的值,參數彼此之間用 ; 隔開

    我稍微抄了一下我們專案的程式碼,最後的 connection string 長這樣

Data Source=LAPTOP-DB451NK0\\SQLEXPRESS;Initial Catalog=ABC;Integrated Security=SSPI

    PS:在使用 sqlmetal 時,也可以寫成,裡面的 connection string 就不用再多個 \ 了

sqlmetal /conn:"connection string" /dbml:data.dbml /context:DataBaseDataContext

    會有兩個反斜線是為了避免被讀成跳脫字元,再來去我們的 Program.cs 那邊,在最上面引入我們的 ABC 資料庫 (它的 name space 是 Test.TestDB),輸入 using Test.TestDB;

    然後在 main 裡面寫下這些

    
    反正我看我們那邊的資料庫程式幾乎都是依這種方式在寫的,我也沒特別去理解它每個方法的詳細介紹,反正能跑就好。執行程式後,你就能看到你的資料表成功新增一筆 (那個 CustomerID 是識別規格,所以我們無法指定它的值)




沒有留言:

張貼留言