EntityModelStudio系列教程2--静态建模之实体模型设计
在EMStudio中靜態建模的概念和內容是來自于UML標準的,所以EMStudio提供的靜態建模的設計能力是完全可以滿足開發者的設計要求的。但是與UML標準比較,EMStudio中的靜態建模還存在兩個不同的特色:
?1.?類與實體的概念是一致的
也就是說,在EMStudio的靜態建模中類和實體是完全相同的兩個概念。這與目前大部分的書籍和資料的表述是不同的。EMStudio這么做是因為定位問題,同時也給開發者提供了完成靜態建模即完成數據庫設計的便利。
?2.?靜態建模和數據庫設計高度統一
在EMStudio中靜態模型的設計和數據庫的設計是完全結合在一起的,開發者完全可以通過靜態建模一個步驟完成兩種設計工作。另一個高度結合的體出現在與,實體的繼承特性在數據庫設計過程中也得到充分和完善的體現。所以開發者實際上是用面向對象的方法完成數據庫設計的。
下面開始具體介紹EMStudio的靜態建模部分的內容。
一.創建工程及實體
1.創建新工程
首先運行EMStudio,主界面顯示后從主菜單選擇FileàNew Project,完成新工程的創建,工程的默認名字是“MyProject”。在實體模型視圖(Entity Model)中會顯示新建的工程,如下圖所示:
2.定義新實體
下面開始定義一個新的實體。鼠標右擊工程節點,在彈出菜單中選擇:New—>Simple Entity,完成一個簡單實體的定義。完成操作后實體模型視圖會顯示新的實體,其位置是作為工程節點的子節點,如下圖所示:
展開實體Entity1節點,可以看到實體包含的內容:索引,成員(等同于字段),關系和觸發器。這個一個實體和數據表應該有的一些內容。
二.實體設計器的使用
雙擊實體節點Entity1可以打開實體設計器,在實體設計器中可以完成與實體有關的絕大部分設計和編輯工作。雙擊后顯示界面如下:
實體設計器通過不同Tab頁來組織實體包含的不同內容。在當前顯示的屬性頁中可以編輯實體自身的屬性。我們可以將實體的名字改為一個更有實際意義的名字。點擊Name屬性,然后輸入“Company”,按回車。這樣就完成了實體名字的修改。可以觀察一下,此時實體模型視圖中的實體名字也顯示為“Company”。其它屬性介紹如下:
Comment:
是對實體的說明性文字
Entity Type:
實體類型。由于我們創建的是簡單實體,所以這里顯示的Simple。這個屬性是不可修改的。另外兩個類型是組合(Comb)和關系(Relation),這兩種類型的實體會在后續的章節中介紹。現在先了解簡單實體的內容。
IsAbstract:
用于指定當前的實體是否為抽象的。
IsAECC:
表示當前實體是否為一個容器實體,該屬性不可修改。關于容器實體我們也是在后續相關章節中再介紹。
好,現在點擊Member頁,切換到實體成員的設計界面,然后點擊Add按鈕定義一個新的實體。操作完成后界面如下圖所示:
點擊Name屬性,輸入“CompanyName”,按回車,完成成員的名稱修改操作。
除了關系和實體屬性以外,成員,索引和觸發器的定義和修改都是使用相同的操作方式完成的。如果要刪除,那么先選中需要刪除的項,然后點擊Delete按鈕就可以了。這里需要注意一個成員屬性,那就是“Mapping Field”屬性。這個屬性表示當前的成員是否對應于數據表中的一個字段。如果選擇是,那么在生成數據庫時數據表中就會有這個字段,否則就沒有,EMLib框架在完成各種ORM功能時也不會處理這個成員。
讀者可以切換到索引頁和觸發器頁,定義新的索引和觸發器,看一下其中內容。讀者可以發現索引和觸發器的內容和Sql數據庫是一致。這是因為新創建的工程默認是使用Sql數據庫的。如果需要修改的話,選擇主菜單:ProjectàSetting,在設置界面中修改。這個操作會在后續內容中介紹。現在選擇主菜單FileàSave,完成工程的保存操作,因為后續的介紹需要使用到這個工程。
三.創建實體圖和關系
1.創建實體圖
鼠標右擊工程節點,在彈出菜單中選擇NewàEntity Diagram菜單項,完成實體圖的創建。操作完成后,實體模型實體中會出現新的實體圖節點,如下圖所示:
鼠標右擊實體圖節點,在彈出菜單中選擇Property菜單項。在實體圖的屬性編輯界面中將實體圖的名字修改為Main,然后按OK按鈕返回,完成實體圖的改名操作。
2.定義新關系
雙擊實體圖節點Main打開實體圖,在主窗體的客戶區就會顯示實體圖的內容。當然現在顯示的實體圖還沒有任何內容。用鼠標在實體模型視圖中選中Company實體節點,然后以Drag/Drop方式將該實體放置到在客戶區打開的實體圖中,Drop的位置請靠近左上角,以方便后面的操作。操作完成后的結果如下圖所示:
由于關系存在于兩個實體之間(當然自反關系是一個例外),所以我們還需要定義一個新的實體。在實體圖工具條上選中簡單實體按鈕,如下圖所示:
在實體圖中的空白處按下鼠標左鍵,然后以Drag/Drop方式向右下方向拉出一個方框,再釋放鼠標左鍵。這樣就完成了一個新實體的定義,如下圖所示:
請將該實體的名字改為Employee。現在就可以開始定義新的關系了,選擇實體圖工具條中的Composition按鈕,如下圖所示:
然后將鼠標鍵移動到Employee實體上,按下鼠標左鍵,以Drag方式將鼠標移動到Company實體上,然后釋放鼠標左鍵,這樣就完成了一條新關系的定義。如下圖所示:
3. 修改關系的名稱?
在實體圖中,鼠標右擊關系,在彈出菜單中選擇Property菜單項,打開關系編輯界面。然后選擇Name屬性,將名字改為HasEmployee。
四.關系的屬性
在開始介紹關系屬性之前,先明確關系主方和付方的概念。從圖形上來說,關系箭頭所指方是關系的主方,而另一方就是關系的付方。對于剛才創建的關系來說Company實體是主方,Employee實體是付方,這表示Company實體包含1個或者多個Employee實體。關系的名稱修改完成后,請展開關系屬性界面中所有節點,如下圖所示:
下面開始逐個介紹關系的屬性,這部分的內容很重要,因為靜態模型的精華是在于關系。
Comment:
對關系的說明
Enable Navigate Primary:
在UML標準中,關系的雙方對對方的知曉(ware)往往是單向的。雙向知曉會在源代碼中出現互相引用的情況,這是高耦合的一個標志。所以通常的情況下這個屬性一般是設置為false。但是在某些情況確實會需要互相知曉對方的情況。比如,樹形控件中的父節點有子節點屬性,從而父節點可以知道所有的子節點;同時子節點有一個父節點屬性,從而子節點可以知道父節點。這個時候,我們就可以將該屬性設置為true。
這個屬性的值也會影響到EMLib的ORM操作。如果設置為true那么在級聯的實體激活操作中EMLib不僅會激活實體以及付方實體,并且還會根據該屬性值激活或者初始化付方實體中表示主方實體的屬性。從而讓付方實體可以訪問到(或者說感知到)主方實體。
Foreign Key Options:
這部分是與外鍵相關的屬性。在EMStudio的靜態模型中,實體間關系會以外鍵的方式映射到相關的數據表中。所以這個部分屬性允許開發者設置外鍵的屬性。
Foreign Key Options—Name:
這個屬性用于設置外鍵字段的名稱。這是目前開發者能夠修改的唯一屬性。外鍵的類型屬性是不允許修改的,EMStudio會根據當前所使用的數據庫自動確定。
Minor Entity Name:
付方實體的名稱,在創建關系時確定,無法修改。
Minor Multiplicity:
表示付方實體的數量,“1”和“0..1”表示單;“0..*”和“1..*”表示多。這和UML標準是一致的,含義也沒有變化。
Minor Options:
這部分的屬性用于設置付方實體的內容。
Minor Options—Active:
EMLib使用這個屬性確定,在執行級聯的激活操作中是否激活這個關系的付方實體。設置為true表示需要在級聯激活中激活付方實體,false表示不激活。請將其改為true。
Minor Options—Delete:
EMLib使用這個屬性確定,在執行級聯的刪除操作中是否刪除這個關系的付方實體。設置為true表示需要在級聯刪除中刪除付方實體,false表示不刪除。
Minor Options—Property Name:
關系在源代碼中是通過屬性來體現的,在EMStudio的靜態模型中這樣的屬性稱為關系屬性。關系屬性出現在主方實體中,表示主方知道付方存在并可以訪問。這個屬性用于設置源代碼中關系屬性的名稱。為了在生成的源代碼中看到效果,請將其改為HasEmployee。
Primary Multiplicity:
表示主方實體的數量,“1”和“0..1”表示單;“0..*”和“1..*”表示多。這和UML標準是一致的,含義也沒有變化。
Primary Entity Name:
主方實體的名稱,在創建關系時確定,無法修改。
Relation Type:
關系的類型,在創建關系時確定,無法修改。
最后介紹一下Enable Navigate Primary屬性,請將其值改為true,然后就會出現一個新的屬性:Primary Options。Enable Navigate Primary屬性的值設置為true以后,表示付方實體需要感知主方實體,這在源代碼中也是通過屬性來實現的,這和上文提到的樹形控件的作法類似。Primary Options中的屬性就允許開發者設置該屬性的名稱。請關閉實體設計器界面,返回主界面,然后保存工程。
五.編譯工程及生成源代碼
1.設置源代碼輸出目錄
在生成源代碼前先確認一下源代碼輸出的位置。請選擇主菜單ProjectàSetting菜單項,打開設置項目界面,如下圖所示:
窗體中最下面那個Output Path設置項就是定義源代碼的輸出路徑。默認是在C盤,由于在筆者的電腦上可以使用這個目錄所以筆者就沒有修改。請讀者確認在自己電腦上運行EMStudio時,EMStudio對指定目錄擁有寫的權限。
2.編譯工程
這一步不是必須的,因為直接生成源代碼話,EMStudio也會自動先執行編譯,沒有錯誤以后才會生成源代碼。請選擇主菜單ProjectàCompile菜單項執行編譯操作。如果讀者是嚴格按照上述步驟做下來的話,應該是通不過編譯的,會產生如下的兩個錯誤:
第一個錯誤是說:實體Employee沒有任何成員。請雙擊該錯誤,打開實體Employee的設計界面,然后為實體Employee定義一個新的成員,名字是MyBirthday,類型是DateTime。
第二個錯誤是說:連接字符串無效。請雙擊該錯誤打開設置項目界面,如前圖所示。現在讀者有兩個選擇,其一是點擊“New Connection”按鈕新建一個真實的連接從而得到一個連接字符串。其二是在“Connection String”文本框中輸入任意非空非空格的有效字符串,比如“abc”之類的就可以。為簡便起見現在先輸入“abc”。
好,保存工程,再次執行編譯操作,這是就應該可以成功通過編譯了。在輸出窗口可以看到成功信息,如下圖所示:
3.?生成源代碼
選擇主菜單ProjectàBuild Source生成源代碼。請確認在設定的源代碼輸出位置生成了源代碼文件。
六.源代碼解讀
在指定的源代碼輸出目錄中,會存在一個名為MyProject文件夾。這個名稱來自于項目的工程名。請打開該文件夾,會有一個名為C#的文件夾,這表示我們生成的是C#語言的源代碼。源代碼的語言類別在設置項目界面中是可以修改的。請打開該目錄,會看到如下所示的目錄,如下圖所示:
EDModel.Biz.EDCustom文件夾中文件是以實體類為單位的,一個實體對應一個文件,開發者如果需要寫自己定制的代碼可以寫在這些文件中。在將代碼添加到自己的項目中時請使用復制的方式添加,這樣重復生成代碼時自己寫的代碼就不會被覆蓋。EDModel.Biz.EDExtern文件夾中兩個文件。MyProject.xml稱作模型文件,在初始化EMLib框架時需要這個文件。另一個是EDModel.cs文件,該文件體現了當前實體模型的靜態結構。所以將該文件添加到工程時請使用引用添加,這樣重復生成源代碼后可以保證當前工程中是最新的代碼。開發者不能修改該文件中的代碼,否則會導致EMLib框架無法正常使用。
現在打開EDModel.cs文件看一下其中的內容。首先看命名空間namespace MyNamespace,這個名字是可以修改的,在主菜單ProjectàSetting菜單項,打開項目設置窗體,然后在其中編輯Namespace就可以了。MyContext這個類是用于初始化EMLib和生成EMContext對象的類,以后在介紹Eql是會提到它。這個類的名字可以在項目設置界面的Context Class Name中修改。
在MyContext類后面是若干個繼承自EqlEntityMeta的類,這些類稱為數據表元類。數據表元類中的成員和數據表中的字段是對應的,并且在MyContext類中會有每一個元類的成員。這樣的設計是為了方便Eql的使用。如何使用Eql會在其它相關部分中再做介紹。接著元類的就是實體類了。請讀者確認一下每一個實體類的成員是否和設計時定義的是一致的。由于我們定義了一個關系,所以在主方實體Company中會有關系屬性HasEmployee,這個名字和設計時指定的是一致的。另外由于我們指定關系的Enable Navigate Primary屬性為true,表示付方實體可以感知主方實體,所以在付方實體Employee中存在關系屬性Host_Relation9,這個屬性表示付方實體對應的主方實體。
在項目設置中的Entity Model設置頁,有一個選項Serializable,這個設置項用于控制是否在生成的源代碼中給實體類加入Serializable屬性。
七.與模型相關其他一些操作
1.刪除操作
在EMStudio中刪除操作有兩種:從模型中刪除和從實體圖中刪除。請打開實體圖,然后鼠標右擊實體Employee,在彈出菜單中選擇DeleteàDelete From Diagram菜單項。可以看到實體Employee從實體圖中消失了,但是在實體模型視圖中Employee實體還是存在的。這個意思是剛才操作只是從實體圖中刪除了一個表示實體的圖形符號,而不是實體本身。現在選擇主菜單EditàUndo菜單項(或者快捷鍵CTRL+Z),執行Undo操作,可以看到圖形又恢復了。然后再次在實體圖中右擊Employee實體圖形,在彈出菜單中選擇菜單DeleteàDelete From Model菜單項。可以看到Employee實體從實體圖和實體模型視圖中都消失了。這表示實體Employee實體被真正的從模型中完全刪除了,模型中已經不存在Employee這個實體了。
2.包的使用
在EMStudio中包是一種用來組織模型的工具。在實體模型視圖中,用鼠標右擊工程節點,在彈出菜單中選擇NewàPackage菜單項就可以定義一個新的包了。EMStudio中包的含義和UML中一致。通過右擊包節點,開發者可以在包內定義其它內容。
3.查找
EMStudio中查找分兩種:查找和引用查找。所謂查找是一般意義上的查找,引用查找是指查找一個實體在當前的實體模型中在那些地方被引用到。先介紹查找。選擇主菜單EditàFind菜單項,打開查找界面。如下圖所示:
在Find what文本框中輸入Com,在Search in組合框中選擇Project,在Search types中只選擇Entity,Match case和Match whole word復選框不要選上,然后點擊Find按鈕。在Find Results視圖中就會顯示查找結果,如下圖所示:
這個結果表示實體Company在靜態模型中存在于兩個位置,一個是在模型MyProject的Main實體圖中,另一個是在模型MyProject中。請雙擊第一個查找結果,實體圖會被自動打開,并且實體Company在實體圖中是被選中的。
在實體Employee中定義一個新的成員,名字是PreviousCompany,類型是Company類型。然后在實體模型視圖中右擊實體Company,在彈出菜單中選擇Find All References菜單項,就會查找實體Company所有被使用到的地方,結果如下圖所示:
結果表示實體Company在當前的靜態模型中,在兩個不同位置被使用到。讀者可以雙擊這兩個結果,實體Company被使用到的地方會自動打開。
?
本節內容到此已全部講述完畢,如果有疑問,或者需要技術支持可以訪問我們網站:http://www.WideUnion.com。提出您的問題或者在論壇中提交問題,同時我們也非常希望能聽到您的建議和需求,以便我們為您提供更好的產品和服務。
轉載于:https://www.cnblogs.com/WideUnion/archive/2012/09/22/2698321.html
總結
以上是生活随笔為你收集整理的EntityModelStudio系列教程2--静态建模之实体模型设计的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 使IE6下PNG背景图片透明的七种方法
- 下一篇: 用Keil-MDK开发TQ2440裸机程