問題html
你想了解配置模型中的各類選項。web
解決方案數據庫
當你添加一個ADO.NET實體數據模型到你的項目中時,實體框架設置.edmx文件的Build Acion屬性爲Entity Deploy。另外,設置元數據項目處理(Metadate Artifact Processing)爲「嵌入輸出程序集中」(Embed in Output Assembly)。當你編譯項目時,Entity Deploy 會從.edmx文件中提取三個部分的內容放到三個不一樣的文件中。CSDL部分被提取到Model.csdl文件,MSL部分被提取到Model.msl文件中,SSDL部分被提取到Model.ssdl文件中。由於「嵌入輸出程序集中"選項,這三個文件會做爲資源嵌入到程序集中。框架
更改元數據項目處理(Metadate Artifact Processing)爲「複製到輸出目錄」(Copy to Output Directory),會致使model.*這三個文件被複制到程序集的輸出目錄中。它們不會做爲資源被嵌入到程序集中。學習
原理ui
.edmx文件包含所有三層:概念模型層,映射層和存儲邏輯層。 它還包含設計器用於管理計設窗口的數據。在運行時,實體框架單獨使用每一層。.edmx文件只是一個供設計時使用的便捷容器。模型的配置依賴模型中全部的層,這些層能夠被嵌入程序集,存儲在文件中,也能夠是7-2節中看到的那樣,從別的數據源獲取並完成MetadataWorkspace實例的建立。spa
若是元數據項目處理(Metadate Artifact Processing)設置爲「嵌入輸出程序集中」(Embed in Output Assembly),你將會看到你的配置文件App.config或者web.config中的鏈接字符串,包含一個metadata標籤,它多是以下的樣子:翻譯
metadata=res://*/Recipe3.csdl|res://*/Recipe3.ssdl|res://*/Recipe3.msl;設計
這些符號表示,嵌入程序集中的模型層對應的搜索路徑。若是更改元數據項目處理(Metadate Artifact Processing)爲「複製到輸出目錄」(Copy to Output Directory),你會看到鏈接字符串會改變成相似下面的樣子:3d
metadata=.\Recipe3.csdl|.\Recipe3.ssdl|.\Recipe3.msl;
這些符號表示,每一個模型層對應文件的路徑。
當把模型層定義數據做爲資源嵌入程序集中時,你不會被只引用可執行程序集的鏈接字符串語法所限制。表7-1展現了,你可能在別的程序集中引用嵌入模型層數據的結構。
表7-1. 加載模型層數據的鏈接字符串語法
問題
當你從數據庫導入模型時,你想使用實體框架的單複數服務。
解決方案
假設你有如圖7-3所示數據庫表。
圖7-3 數據庫的表Employees和Tasks
注意圖7-3中的表使用複數形式。這是不少數據庫的常見用法。有些DBA認爲,全部的表都應該使用複雜形式;另外一些則反對這種做法。還有少數DBA,彷佛不使用上面的任何一種作法,而是混合使用。依據你的觀點,你也許對模型實體對應的表名使用單數形式。實體框架提供的複數服務,會自動地將實體名從單數形式生成適當的複數形式。
爲了在導入表時使用單複數服務,須要在實體數據模型嚮導的最後一步(如圖7-4),勾選上肯定所生成對象名稱的單複數形式。默認狀況下,這個複選框是勾選上的。
圖7-4. 啓用複數服務
圖7-5展現的是,在導入圖7-3中的表建立模型時,沒有使用單複數服務。注意,實體名直接使用了表名,並保持了複數形式。圖7-6展現的是導入相同的表建模時,啓用單複數服務後,實體名使用的是表名的單數形式。
圖7-5. 導入圖7-3中的表建立模型時,沒有使用單複數服務
圖7-6. 導入圖7-3中的表建立模型時,啓用單複數服務
原理
不少開發人員喜歡使用圖7-6中所展現的實體名形式,(請看實體上邊黑體字名稱)。他們不光是使用單數形式的實體名,就連Task實體中的導航屬性也不是使用圖7-5中所展現的那種複數形式。在這兩種狀況下,導航屬性是一個實體引用,不是一個集合。圖7-5中的複數形式,容易形成混淆。
若是咱們的表名是單數形式,單複數服務會正確地複數化基於集合的導航屬性和實體集的名稱。 這是爲了照顧另外一半使用單數形式表名的DBA社區。
你能夠經過修改「以複數形式表示新對象」屬性,來設置添加新實體到模型時,單複數服務的默認狀態爲on/off(開啓/關閉)。
你能夠在實體框架以外使用這個單複數服務,它在System.Data.Entity.Design命名空間中,使用時須要引用System.Data.Entity.Design.dll,你還要將你項目的框架從.NET Framwork4 Client Profile修改爲.NET Framwork4(譯註:若是已是該框架,就不用修改了)。這個修改操做在項目的屬性裏。代碼清單7-3,演示了單複數服務對單詞「Person"和"People"的單複數化。
代碼清單7-3. 使用單複數服務
1 var service = PluralizationService.CreateService(new CultureInfo("en-US")); 2 string person = "Person"; 3 string people = "People"; 4 Console.WriteLine("The plural of {0} is {1}", person, 5 service.Pluralize(person)); 6 Console.WriteLine("The singular of {0} is {1}", people, 7 service.Singularize(people));
代碼清單7-3的輸出以下:
The plural of Person is People The singular of People is Person
實體框架交流QQ羣: 458326058,歡迎有興趣的朋友加入一塊兒交流
謝謝你們的持續關注,個人博客地址:http://www.cnblogs.com/VolcanoCloud/