VS 2013 LightSwitch 入門教學 Part 2 - 定義數據關係

各位夥伴們,

第一次聽到 LightSwitch 這個字眼? 它是什麼呢? 有時候我們想在 Visual Studio 中用工具拖拉點選,快速地 “拉" 出一個資料庫的應用程式,例如中小企業需要一個簡單的產品型錄管理應用、庫存管理、辦公室資產管理、甚至訂便當系統,這類簡單的辦公室應用大都只有基本的資料庫表格操作、以及表單及報表的應用,無需太多客製化空間或是系統整合、也不用寫程式碼,這時候就可以使用 Visual Studio LightSwitch 這個工具!(在以往可能是使用 Access 、甚至是更早期的 FoxPro 工具來設計資料庫應用,但這類的工具無法設計出 Web 版本、往往也侷限在單機操作或是 Client-Server 架構)

我們整理了一系列的 Visual Studio 2013 LightSwitch 入門文章,相信按圖學習操作,你馬上在 5 分鐘就可以 ”拉" 出一個簡單的資料庫應用!

 

在之前的文章中我們解釋了LightSwitch的表格和項目,及如何使用數據設計器來定義它們。如果你錯過了,請參考 - VS 2013 LightSwitch 入門 Part 1 - 表格裏是什麼? 描述你的資料

VS2013 LightSwitch 入門 Part 2 - 定義數據關係

在本文中,基於第1部分建立的數據模型,我希望把重點放在數據關係上。關係定義了數據庫中一個表格中的資訊如何與另一個表格中的資訊相互動。更簡單的來說,關係定義項目在一個數據源(或跨數據源)中如何與另一個項目互動。你可以把項目之間的關係想像成在日常生活中物體之間的關係。例如,一所學校和學生之間的關係是現實世界中存在的一個關係。同樣,一個真實世界存在學生與他們班級之間的關係。在數據模型中,您可以定義一個項目包含學生,另一個項目包含他們的班級。當你把這兩個項目聯繫在一起,你就建立了一個關係。

建立更好的通訊錄

在 Part 1的實例中,我們建立了管理聯絡人的通訊錄應用。在我們當前的數據模型中,我們只儲存了聯絡人的一個電話號碼、一個郵件地址和一個住址。

 

然而在現實生活中,聯絡人基本上不止包含這些資訊。為了在數據庫中為它建立模型,我們使用LightSwitch。我們需要定義額外的表格,並且以一對多的關係將這些表格與聯絡人相關聯。一對多的關係應該最常被定義的關係模型。在我們的實例中,它代表一個聯絡人可以擁有多個郵件地址、多個電話號碼多個住址。

讓我們從郵件地址開始。如果要為我們的聯絡人增加多個郵件地址,我們有幾個選擇。一個選擇是在聯絡人中增加固定個數的郵件地址屬性,像Email1, Email2, Email3。這就意味著你不能增加超過3個郵件地址。如果僅考慮這個應用的本身類型看似是不錯的。但是如果你要在表中增加大量​​同樣意義的屬性(這裡指的是郵件地址),那就需要思考其他的方法。我們可以改為建立一個郵件地址的表,並定義一對多的關係。

在數據設計器中,點擊“New Table”按鈕,定義一個EmailAddress 的實例,他有兩個必要屬性:Email(EmailAddress類型)和EmailType(String類型)。

 

我們為EmailType建立一個可選列表,該系列第1部分中學到過。這個屬性會捕捉郵件地址的類型,是私人的還是工作上的。我會選擇最大長度是255個字節(因為我們從來用不到255個字節)。

 

為什麼不將最大長度設為8個字節,和可選列表中的值一樣?因為如果我們要將一個值加入可選列表,它必須比8個字節長,這樣我們就不必改變數據模型。硬碟空間不貴所以還是偏向於選擇較長的最大長度來適應底層的表。這樣可避免頻繁的改變數據模型。

用LightSwitch定義關係

既然已經有了EmailAddress項目,我們就開始定義關係吧。在數據設計器的頂端點擊“Relationship”按鈕,會彈出“Add New Relationship”對話框。在“To”一欄中選擇聯絡人來建立一對多的關係。”多樣性”默認就是多對一,所以不需要改變它。”多樣性”定義你建立的關係的類型。在LightSwitch中,你還可以指定多樣性是一對多,或者只允許某個相關項目的最大值。

了解更多關於定義不同類型關係的內容,請查看:How to: Define Data Relationships

了解更多關於如何在LightSwitch中建立多對多關係的模型,請查看:How to Create a Many-to-Many Relationship

你也可以指定,當聯絡人被刪除時,對應郵件地址會如何。默認情況下,它會被設為”限制的”。這就是說擁有任何郵件地址的聯絡人是不能被刪除的。如果我們的客戶他有很多訂單,那麼這樣是合理的,但不適用我們現在這個情況。我們希望刪除聯絡人時LightSwitch會自動刪除郵件地址, 所以將“當被刪除時採取”選為“聯級刪除”(Cascade delete)。

 

對話框底部的描述能幫助你了解當你設置關係時會做哪些操作。點擊”OK”就能在數據設計器中看到關係圖,它會顯示這個這個項目所有的關係。注意,現在Contact屬性已經增加到了EmailAddress項目。這叫做導覽屬性,表示EmailAddress屬於Contact。

 

雙擊打開Contact項目,你會看到Contact的EmailAddresses導覽屬性。在LightSwitch中導覽屬性會在屏幕上顯示導向的數據,所以正確建立它們的模型是很重要的。

現在已經定義好EmailAddress表並建好了關係,我們需要刪除之前在Contact表中定義的Email屬性。選擇Email屬性點擊刪除鍵。或者你可以右擊在選單中選擇刪除。同時還需要刪除Address1、Address2、City、State、ZIP和Phone 屬性。

 

接下來照著增加EmailAddress的方式增加PhoneNumber表格。你也許想知道為何不將PhoneNumber增加在EmailAddress裡。這是因為EmailAddress和PhoneNumber是聯絡人的不同方面,他們之間除了聯絡人沒有其他的關係。因此,我們需要增加一個新的表格。

點擊”增加表格”按鈕,定義PhoneNumber項目和兩個必要屬性:Phone(電話號碼類型)和PhoneType(String類型)。PhoneType有一個可選列表,“Cell”、“Fax”、“Home”和”Work”。

 

接下來像之前那樣增加關係。當PhoneNumber顯示後,在數據設計器頂端點擊“Relationship”按鈕,指定與Contact表格的關係。

 

最後,我們需要為Contact建立Address表來儲存多個住址。點擊增加表按鈕並建立具有以下屬性的Address項目:AddressType、Address1、Address2、City、State、ZIP。AddressType和Address1設為必要屬性。我們可以為AddressType屬性建立可選列表:“Home”、“Work”和“Other”。

 

現在為Address建立關係。當Address顯示後,點擊“關係…”按鈕並指定與Contact表的關係。我們再次選擇“聯級刪除”這樣任何住址都能被自動刪除。當前情況下這樣的選擇很合理,因為當用戶刪除一個聯絡人時,他的所有資訊就應該被自動刪除。記住,也許在其他應用程序中不需要這樣的設定。比如,當建立訂單錄入應用程序時,你會希望限制客戶的刪除操作如果他們在系統中有任何訂單的話,這樣就可以保存訂單歷史。

 

現在我們在數據設計器中打開Contact項目,你會看到它所有直接的關係。

 

通訊錄測試

現在我們設計好了數據模型,那就可以建立範例快速的測試一下。將來我們會採取更多的範例,但現在就簡單得替換在第1部分中建立的AddEditScreen來測試一下。

順便提一下,如果你打開當前的AddEditContact範例,注意我們在Contact實例中刪除的部分在範例中被移除了。這是LightSwitch一個很好的功能。當你在設計數據模型時,它能保證你的範例中沒有逐句綁定錯誤。所以當你改變或刪除一個項目的屬性時(比如我們這個模型中的Phone、Email和Address資訊),所有的涉及到整個屬性的範例都會被更新。注意如果你在項目中增加了一個屬性,LightSwitch不會自動把它增加到你的範例中。不論如何,它使你在最初設計中重命名和刪除項目屬性時變得很方便。

讓我們增加一個新的AddEditContact範例,首先在解決方案管理器中刪除在第1部分中建立的這個範例。然後在HTMLClient下的Screens節點上右擊,選擇Add Screen…

 

在增加新範例窗口中,選擇Add/Edit Details Screen模板。在Screen Data下拉選單中選擇Contacts。當你做完這個操作,你會看見建立的相關項目的多選框。選擇全部,點擊OK。

 

這會建立一個範例,允許你編輯contact詳細資訊及在不同標籤頁中查看相關子表格。默認情況下,範例以對話框形式顯示,但是你可以通過不勾選appearance 部分下的“Show As Dialog”選項,讓範例在窗口中全部展開。

 

最後,將這個範例和第1部分中建立的BrowseContacts範例關聯起來。在範例設計器中打開BrowseContacts,選擇增加Contact按鈕並將Tap action設為addAndEditNew。LightSwitch會自動提示跳轉到正確的範例。你也可以在屬性窗口中改變”增加Contact”按鈕的圖標。

 

對編輯Contact做同樣操作。選擇Contacts列表,將Tap action設為editSelected:

 

按F5編譯並運行這個應用程序。點擊增加按鈕(現在圖標顯示為”+”)來增加新的聯絡人,或者選擇列表中的一個聯絡人進行編輯。

 

注意LightSwitch會查看所有我們在數據模型中建立的一對多的關係,並為每一個子表格建立標籤頁;Email Addresses、Phone Numbers和Addresses。你可以運用上面我們對Contacts進行的操作使這些列表在那些標籤頁上也能編輯。選擇列表將Tap action設為editSelected,LightSwitch會幫你為每一個字表建立add/edit範例。

因為我們在數據模型中定義了合適的關係,所以LightSwitch在為增加數據到數據庫建立範例時不需要花很多工夫。下一個文章我們會更深入的了解範例模板和如何自定義範例的格局。期待下一回合!

希望你喜歡!

[原文發表地址]  Beginning LightSwitch in VS 2013 Part 2: Feel the Love - Defining Data Relationships  作者:Beth Massi

延伸閱讀 -