1. 程式人生 > >Entity Framework學習筆記——edmx文件

Entity Framework學習筆記——edmx文件

tinc metadata glob 兩個類 color empty 完成 文件中 文件的

上文簡單介紹了一下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);  
#>


Entity Framework學習筆記——edmx文件