20170123

Visual Studio 2015使用SQLite及Entity Framework 6 - 入門篇 - 2

前言

SQLite是一輕量化的資料庫引擎,主要用於程式中的基礎記錄。

Entity Framework 6則是由Microsoft以ADO.NET為基礎而發展出的O/R Mapping架構。

本篇將簡單介紹如何結合二者開發應用程式。

第1篇中,我們簡介了如何安裝SQLite的NuGet套件。接下來會示範如何開發。

 

介面設計

接下來我們可以利用Data Sources來取得ORM的Class,並以之設計簡易的介面

首先打開Data Sources的工具視窗,請選擇「View / Other Windows / Data Sources」

(或是按下[Shift] + [Alt] + [D])

image

 

點選Data Sources工具視窗中的「Add New Data Source」

image

 

在Data Source Type中選擇「Object」以建立與資料庫連結的控制項

image

 

接下來選擇剛建立的Customer Class (如果沒有看到的話,就是第1步作完時沒有先Build一下,所以物件沒有出來)

image

 

按下「Finish」後,會在Data Sources視窗中出現我們選擇的Customer物件

image

 

接下來新增一WinForm名為「Form1」,準備來設計UI介面

長寬先設為640, 480

image

 

重點: 先在Form1.cs的程式碼中加入參考

using System.Data.Entity;

image

這句將會影響讀取資料庫的Load()函式會否出現。

(因為Load是從System.Data.Entity來的Extension Method)

 

點擊Data Sources中的Customer物件,直接將之拉到Form1中

image

 

拉進去後,將會自動產生對應的控制項

如果拉的是物件,則會產生DataGrid

如果拉的是屬性,則會產生Label + TextBox

請拉入剩下的屬性,設計成如下樣式

image

 

各位可以注意到,拉進Class後,會自動加入customerBindingSource

image

 

於此我們再手動從Toolbox中加入一個BindingNavigator,取名為「customerBindingNavigator」

並把其屬性中的BindingSource設為「customerBindingSource」

image

 

設計完介面後,大概會長得像下面一樣

image

 

再來點擊Form1的空白處,增加「Form_Load」的事件,並填入下列程式碼

image

 

再來可以先Build一下,Run一下程式

點擊「Add New」並輸入一些假資料

image

 

不論你是在DataGrid中輸入,或是在下面的TextBox輸入,因為有BindingSource的關係,你可以看到資料會同步顯示

image

 

但是重新啟動應用程式之後,疑,資料不見了~~~

因為我們未把異動的部份存入資料庫,現在來加個儲存按鈕的設定

點擊新增一個按鈕如下圖

image

 

將新增的按鈕命名為「btnSave」,並將Image屬性設為一張儲存按鈕的圖片 (自己找)

image

 

再來在儲存按鈕上點二下以建立它的事件

image

 

大功告成,最後畫面會長得像這樣

image

 

有幾點小地方要注意:

1. 因為Id在Model Designer中是設為StoreGeneratedPattern: Identity,所以我們新增時,Id部份可不輸,或是亂輸。因為DB中Id是設為自動增量,它會自動增量,不會理我們輸入的數

2. 每一個文字框輸入後,都要Tab一下換到別的控制項,以免BindingSource沒吃到我們輸入的值,造成產生NULL值,而我們之前設計的Customer Table又不接受NULL值,引發Exception

3. 最後一點,特別重要。本篇之程式碼只是範例,實際使用會檢查輸入值之類的檢核,以及加入資料庫異常的處理,大家使用程式碼時要特別小心

 

 

總結

本篇介紹了如何使用簡單的方式,建立SQLite資料庫,並利用EF6來存取它。後續有我會再分享比較進階的東西

沒有留言: