EF的edmx文件

来源:互联网 发布:孔子知天命 编辑:程序博客网 时间:2024/05/18 02:46

    

           上文简单介绍了一下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模板代码的学习,插件下载地址:点击跳转)

[html] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. <#@ include file="EF.Utility.CS.ttinclude"#><#@   
  2.  output extension=".cs"#><#  
  3.   
  4. const string inputFile = @"Model.edmx";  
  5. var textTransform = DynamicTextTransformation.Create(this);  
  6. var code = new CodeGenerationTools(this);  
  7. var ef = new MetadataTools(this);  
  8. var typeMapper = new TypeMapper(code, ef, textTransform.Errors);  
  9. var fileManager = EntityFrameworkTemplateFileManager.Create(this);  
  10. var itemCollection = new EdmMetadataLoader(textTransform.Host, textTransform.Errors).CreateEdmItemCollection(inputFile);  
  11. var codeStringGenerator = new CodeStringGenerator(code, typeMapper, ef);  
  12.   
  13. if (!typeMapper.VerifyCaseInsensitiveTypeUniqueness(typeMapper.GetAllGlobalItems(itemCollection), inputFile))  
  14. {  
  15.     return string.Empty;  
  16. }  
  17.   
  18. WriteHeader(codeStringGenerator, fileManager);  
  19.   
  20. foreach (var entity in typeMapper.GetItemsToGenerate<EntityType>(itemCollection))  
  21. {  
  22.     fileManager.StartNewFile(entity.Name + ".cs");  
  23.     BeginNamespace(code);  
  24. #>  
原文地址:http://blog.csdn.net/huyuyang6688/article/details/41627669
         
0 0