上文簡單介紹了一下Entity FrameWork,這裡說一下EF的核心——edmx文件。 在VisualStudio中建立edmx文件(此例環境為VisualStudio2012) 1、新建—ADO.NET實體數據模型: 2、選擇數據模型時,因為我之前已經在資料庫中建立好表了,所以我們這裡先選擇從 ...
上文簡單介紹了一下Entity FrameWork,這裡說一下EF的核心——edmx文件。
在VisualStudio中建立edmx文件(此例環境為VisualStudio2012)
1、新建—ADO.NET實體數據模型:
2、選擇數據模型時,因為我之前已經在資料庫中建立好表了,所以我們這裡先選擇從資料庫生成(即DB First),如果選擇空模型,就可以在沒有建立資料庫的情況下,通過先建立實體模型來生成實體類和資料庫表。
3、選擇資料庫連接
4、選擇或設置好連接的伺服器、驗證信息、資料庫名:
5、註意因為連接字元串將會保存到配置文件中,所以在這裡要選擇【是,在連接字元串中包括敏感數據】:
6、選擇我們想要生成實體的表:
7、一切都完成後,如下圖,edmx就已經根據我們所選的資料庫表生成了相應的實體,同時,在解決方案資源管理器中的T4模板Model.tt下還為自動我們生成了Department和Employee實體類。
到此,edmx文件就已經創建完成了。
上文說到,edmx文件的本質就是一個XML文件,它用於定義概念模型、存儲模型和這些模型之間的映射。雖然edmx文件預設情況下以實體設計器的方式打開,還可以右擊Model.edmx文件以XML文本編輯器打開,這時就可以看到edmx文件的廬山真面目:
從代碼中可以看到,edmx大致由SSDL、CSDL、C-S三部分組成,分別對應著對於資料庫、實體、資料庫表與實體之間的映射這三方面的解析,SSDL中有對資料庫表、欄位等的規定,CSDL中有對實體名、實體屬性等的規定,C-S中有對資料庫表與實體之間的映射。一句話總結edmx文件,就是用來解析存儲模型、概念模型以及這兩者之間的映射,其實也還是上文中那張圖片的詳細表現。
上文第七步說到,生成edmx模板的同時,跟實體相對應的兩個類Employee和Department也生成了,在實體類的父節點,還有一個Model.tt,這就是T4模板,看了下麵這一段T4模板中的代碼,就會理解,其實這兩個實體類是T4模板根據edmx配置文件生成的。(用VisualStudio查看T4模板時代碼會很混亂,因此可以安裝一個T4 Editor的插件再進行T4模板代碼的學習,插件下載地址:點擊跳轉)
<#@ include file="EF.Utility.CS.ttinclude"#><#@ output extension=".cs"#><# const string inputFile = @"Model.edmx"; var textTransform = DynamicTextTransformation.Create(this); var code = new CodeGenerationTools(this); var ef = new MetadataTools(this); var typeMapper = new TypeMapper(code, ef, textTransform.Errors); var fileManager = EntityFrameworkTemplateFileManager.Create(this); var itemCollection = new EdmMetadataLoader(textTransform.Host, textTransform.Errors).CreateEdmItemCollection(inputFile); var codeStringGenerator = new CodeStringGenerator(code, typeMapper, ef); if (!typeMapper.VerifyCaseInsensitiveTypeUniqueness(typeMapper.GetAllGlobalItems(itemCollection), inputFile)) { return string.Empty; } WriteHeader(codeStringGenerator, fileManager); foreach (var entity in typeMapper.GetItemsToGenerate<EntityType>(itemCollection)) { fileManager.StartNewFile(entity.Name + ".cs"); BeginNamespace(code); #>