entity framework6 edmx文件详解

entity framework中的edmx文件作为代码与数据库沟通的桥梁,作用是至关重要的。如果edmx文件出了问题,ef就基本上没得用了。虽然edmx文件是由ef自动生成的,但是一些特定的操作可能会引发ef的bug,从而导致edmx文件出错,并且无法使用“从数据库更新模型”命令来修复,删除edmx重建又要在新的edmx中重新声明大量枚举类型,这个时候,理解ef的内部结构就显得很必要了。

我们创建一个简单的数据库,里面只有一张User表,表中有Id,Name,Type三个字段,其中Id为主键int型,Name为nvarchar型,最大长度为500,Type为int型,实体类中对应为枚举。

创建完毕后,用文本编辑器打开edmx文件,如下:

复制代码

<?xml version="1.0" encoding="utf-8"?>
<edmx:Edmx Version="3.0" xmlns:edmx="http://schemas.microsoft.com/ado/2009/11/edmx"><!-- EF Runtime content --><edmx:Runtime><!-- SSDL content --><edmx:StorageModels><Schema Namespace="edmxModel.Store" Provider="System.Data.SqlClient" ProviderManifestToken="2012" Alias="Self" xmlns:store="http://schemas.microsoft.com/ado/2007/12/edm/EntityStoreSchemaGenerator" xmlns:customannotation="http://schemas.microsoft.com/ado/2013/11/edm/customannotation" xmlns="http://schemas.microsoft.com/ado/2009/11/edm/ssdl"><EntityType Name="User"><Key><PropertyRef Name="Id" /></Key><Property Name="Id" Type="int" Nullable="false" /><Property Name="Name" Type="nvarchar" MaxLength="500" /><Property Name="Type" Type="int" Nullable="false" /></EntityType><EntityContainer Name="edmxModelStoreContainer"><EntitySet Name="User" EntityType="Self.User" Schema="dbo" store:Type="Tables" /></EntityContainer></Schema></edmx:StorageModels><!-- CSDL content --><edmx:ConceptualModels><Schema Namespace="edmxModel" Alias="Self" annotation:UseStrongSpatialTypes="false" xmlns:annotation="http://schemas.microsoft.com/ado/2009/02/edm/annotation" xmlns:customannotation="http://schemas.microsoft.com/ado/2013/11/edm/customannotation" xmlns="http://schemas.microsoft.com/ado/2009/11/edm"><EntityType Name="User"><Key><PropertyRef Name="Id" /></Key><Property Name="Id" Type="Int32" Nullable="false" /><Property Name="Name" Type="String" MaxLength="500" FixedLength="false" Unicode="true" /><Property Name="Type" Type="Int32" Nullable="false" /></EntityType><EntityContainer Name="edmxEntities" annotation:LazyLoadingEnabled="true"><EntitySet Name="User" EntityType="Self.User" /></EntityContainer></Schema></edmx:ConceptualModels><!-- C-S mapping content --><edmx:Mappings><Mapping Space="C-S" xmlns="http://schemas.microsoft.com/ado/2009/11/mapping/cs"><EntityContainerMapping StorageEntityContainer="edmxModelStoreContainer" CdmEntityContainer="edmxEntities"><EntitySetMapping Name="User"><EntityTypeMapping TypeName="edmxModel.User"><MappingFragment StoreEntitySet="User"><ScalarProperty Name="Type" ColumnName="Type" /><ScalarProperty Name="Name" ColumnName="Name" /><ScalarProperty Name="Id" ColumnName="Id" /></MappingFragment></EntityTypeMapping></EntitySetMapping></EntityContainerMapping></Mapping></edmx:Mappings></edmx:Runtime><!-- EF Designer content (DO NOT EDIT MANUALLY BELOW HERE) --><Designer xmlns="http://schemas.microsoft.com/ado/2009/11/edmx"><Connection><DesignerInfoPropertySet><DesignerProperty Name="MetadataArtifactProcessing" Value="EmbedInOutputAssembly" /></DesignerInfoPropertySet></Connection><Options><DesignerInfoPropertySet><DesignerProperty Name="ValidateOnBuild" Value="true" /><DesignerProperty Name="EnablePluralization" Value="false" /><DesignerProperty Name="IncludeForeignKeysInModel" Value="true" /><DesignerProperty Name="UseLegacyProvider" Value="false" /><DesignerProperty Name="CodeGenerationStrategy" Value="无" /></DesignerInfoPropertySet></Options><!-- Diagram content (shape and connector positions) --><Diagrams></Diagrams></Designer>
</edmx:Edmx>

复制代码

只要认真看一遍,就会发现edmx文件主要分成了三大部分:数据库部分、实体部分、映射部分。

数据库部分为<edmx:StorageModels> (edmx存储模型)标签以内的内容,记录了数据库中各个表的表名、字段以及数据类型。

实体部分为<edmx:ConceptualModels>(edmx概念模型)标签以内的内容,记录了用来承载数据的实体类的相关信息。

映射部分为<edmx:Mappings>以内的内容,记录了每张表与相应的实体类中所有字段与属性的映射关系。如果你尝试在edmx模型视图中修改一个字段并保存,再用文本编辑器打开edmx文件,你就会发现mapping部分中对应的实体属性发生了变化,而数据库部分没有发生改变。利用这个功能可以实现数据库的字段名与实体的属性名不一致但仍能映射,但不推荐这么做,因为你一旦删除edmx重建,你就可能要再起一次别名。

接下来,我们尝试往edmx模型中添加枚举类。做法为edmx模型视图上右键->模型浏览器->枚举类型上添加新的枚举类,最下方勾选引用外部的枚举类型,填上之前定义好的枚举类的命名空间+类名(如 Demo.Model.Type),确认后保存,再用文本编辑器打开edmx文件,就会发现实体部分多出了一条EnumType标签。如:

        <EnumType Name="Type" a:ExternalTypeName="EdmxTest.Enum.Type" xmlns:a="http://schemas.microsoft.com/ado/2006/04/codegeneration" />

EnumType标签往往出现在实体部分的末尾,也就是</Schema>标签的上方,利用这一点我们可以很方便的实现Enum记录的备份。

在大型项目多人协同开发的时候,如果某个成员对edmx文件进行了一些不正确的合并操作或者一些可能会引发bug的操作,edmx文件很可能会损坏,调用ef的时候就会报一些莫名其妙的错误。这个时候最简单也是最快捷的方法,就是果断的删除edmx模型重建,而不要用文本编辑器去试图解决问题。因为面对大型项目中上千行的edmx文件,用文本编辑器修好的可能性实在是太小了。

当添加一个edmx模型的时候你会发现系统自动为我们生成了***.desinger.cs、***.tt、***.Context.tt、***.edmx.diagram文件。desinger和edmx.diagram分别为旧版context和图表文件,在开发中一般用处不大。其中desinger文件如果edmx启用了旧的objectcontext策略就会生成内容,并且需要项目引用system.data.entity程序集,否则会报错。如果你不想引用,只需要在desinger文件上右键->属性,生成操作选择无即可。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/439126.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CCNA-第十四篇-NAT-下+链路聚合(LACP)+DHCP

CCNA-第十四篇-NAT-下 这一篇是是针对一下华为设备的nat,然后讲讲链路聚合 下一篇来一个DHCP一点点的SDN的介绍 **然后讲完SDN就基本上CCNA结束了哦**华为的链路聚合叫Eth-trunk 思科的链路聚合叫Ether-Channel 华为静态NAT 环境如下 首先把他的telnet开起来,server也是…

[Sharepoint2007对象模型]第一回:服务器场(SPFarm)

Sharepoint是微软一个很重要的服务器产品&#xff0c;它可以方便的创建和维护一个网站&#xff0c;在Sharepoint的管理中心提供了很强大的管理工具。同时为了更加灵活的后期定制和开发&#xff0c;Sharepoint提供了完整的对象模型&#xff0c;对象模型也就相当于Sharepoint的二…

CCNA-第十五篇-DHCP配置+SDN介绍(最后一章)

CCNA-第十五篇-DHCP配置SDN介绍 各位好,如果有一直看下来的谢谢支持 这里是CCNA的最后一篇了,如果真的能吸收很多内容,那么普通的东西基本上都没什么大问题了.除非就是工作经验 下一篇就到一个CCNA的综合实验了 DHCP 思科 创造一个dhcp地址池名字为dhcp 宣告网段为192.168…

[Sharepoint2007对象模型]第二回:Web应用程序服务(SPWebService)

在上一回中说了Sharepoint中的服务器场&#xff0c;在服务器场中最重要的一个服务就是Web应用程序服务。我们自己的Sharepoint网站都是借助于这个服务才能正常运行的&#xff0c;也就是说所有的Sharepoint站点都是搭建在这个服务之上的。Web应用程序服务对应的对象模型为&#…

CCNA-第十六篇-综合实验

CCNA-第十六篇-综合实验 环境以及拓扑图如下 TAG:个人说明,做到最后我才发现hostname打错了,IDC-1打成ISP-1了,不过也没关系,知道就行了,全部的IDC都打成ISP了还有一个的话 ,如果经常弹这个东西可以自己解决 这个是半双工和全双工的意思,毕竟这里是模拟器.也正常, 在接口下打…

[Sharepoint2007对象模型]第三回:Web应用程序(SPWebApplication)

在Sharepoint的管理中心创建一个网站的顺序大致如下&#xff1a;创建Web应用程序-〉创建网站集。所以Web应用程序是网站的一个基础&#xff0c;在一个Web应用程序下可以创建多个网站&#xff0c;本回就主要来介绍Web应用程序这个对象模型以及如何使用对象模型来创建一个Web应用…

CCNP-第一篇-思科SLA+华为BFD+ODR+浮动路由

CCNP-第一篇-CCNP-第一篇-思科SLA华为BFDODR浮动路由 从这就开始NP了,老规矩,先路由后交换,开搞 到了NP之后的配置会多很多很多哦!一篇很长过万字都不出奇. 思科静态路由浮动路由SLA检测 什么叫浮动路由呢?在双线的情况下做备份. 我们知道,路由都是有cost有优先级这个东西的…

SharePoint 2013开发入门探索(二)- 列表操作

我们如何用代码对SharePoint列表做些例如增删改查的操作呢&#xff1f;如果您的程序可以部署到服务器上&#xff0c;就可以使用 服务器对象模型&#xff0c;因为服务器对象模型提供的功能最多&#xff0c;限制最少&#xff1b;否则可能要选择客户对象模型等其他方式&#xff0c…

CCNP-第二篇-SLA扩展+EIGRP高级版(上)

CCNP-第二篇-SLA扩展EIGRP高级版 还是这个环境的SLA 我们想一个问题哈,如果会有抖动呢? 比如左边是主线路,右边是备用的,那如果左边的时候只是偶尔断了一个包,然后他就跳到备用了,然后bfd检测到又跳回来了,这样如此循环,这个就叫做网络抖动,我们有啥办法让他不这样操作呢? …

SharePoint 2013开发入门探索(一)- 自定义列表

在SharePoint 2013中创建自定义列表的方式有很多&#xff0c;在网站内容页面添加应用程序就可以创建&#xff08;站点内容-〉 您的应用程序&#xff09;&#xff0c;也可以通过SharePoint Designer 2013创建&#xff0c;而本文将描述的是用Visual Studio 2012 创建自定义列表的…

使用C#代码部署SharePoint 2013开发包简单总结(一)

这篇文章将总结下如何将自己开发的列表、Web部件、事件接收器等元素部署到SharePoint的服务器。因水平有限&#xff0c;我的做法未必是最佳实践&#xff0c;会有些错误理解和疏漏&#xff0c;欢迎各位高手批评指正——但一定要能给出更好的方案。如果您是SharePoint开发的新手&…

CCNP-第三篇 EIGRP高级版(四个特性)(下)+OSPF复习

CCNP-第三篇 EIGRP高级版(四个特性)(下)OSPF复习 EIGRP篇到此完结 接下来四篇都是OSPF哦 EIGRP下发默认路由 来看一个环境 这种环境一般来说是很常见的,然后这个呢,下面的服务器,都是需要指向汇聚层的,那么如果环境很大的时候,每个机器都要手动写,就很麻烦了 >可以做一个…

CCNP-第四篇-OSPF高级版(一)

CCNP-第四篇-OSPF高级版(一) OSPFOpen shortes path first 开放式最短路径优先协议 最大优点:公有,开放,任何一个品牌都能用 EIGRP最大优点:快的一批 EIGRP最大缺点:思科私有 OSPF甚至于在Liunx上也能运行起来 OSPF是采用动态更新的 所以会给设备带来大量的硬件消耗 在OSPF中…

【转】DevOps到底是什么意思?

提到DevOps这个词&#xff0c;我相信很多人一定不会陌生。 作为一个热门的概念&#xff0c;DevOps近年来频频出现在各大技术社区和媒体的文章中&#xff0c;备受行业大咖的追捧&#xff0c;也吸引了很多吃瓜群众的围观。 那么&#xff0c;DevOps是什么呢&#xff1f; 有人说它…

CCNP-第五篇-OSPF高级版(二)

CCNP-第五篇-OSPF高级版(二) 链路状态数据库LSDB拓扑表 link state database 收到之后放入自己的数据库再计算最新的放入路由表 根据COST值来计算 >COST值的计算方式10的8次方除以带宽这个环境会涉及一个东西叫做重分布,这类会做,然后下一章或者下下章会详细开始讲. 详细环…

IIS 内部运行机制

ASP.NET是一个非常强大的构建Web应用的平台&#xff0c;它提供了极大的灵活性和能力以致于可以用它来构建所有类型的Web应用。 绝大多数的人只熟悉高层的框架如&#xff1a; WebForms 和 WebServices — 这些都在ASP.NET层次结构的最高层。 这篇文章的资料收集整理自各种微软公…

CCNP-第六篇-OSPF高级版(三)

CCNP-第六篇-OSPF高级版(三) 这一节差不多都是密码认证了,还有个NSSA和OE1,OE2 OSPF默认路由OSPF认证问题OSPF特殊区域,NSSA,STUB OSPF下发默认路由 其实跟EIGRP一样,只不过是下发一条路由给别人指向自己 一般都用于核心连接出口处,或者汇聚连接核心处 如果是这种环境下,那…

SharePoint 2013异常信息的查看

刚刚学习SharePoint开发的时候&#xff0c;经常遇到一些异常&#xff0c;却不能直接看到详细信息&#xff0c;很郁闷。这里做下简单的整理&#xff0c;方便查找&#xff1a; 1、代码未处理异常出现黄页——”‘/’应用程序中的服务器错误。运行时错误“。 其实这个黄页是ASP.N…

CCNP-第七篇-OSPF高级版(四)+策略开头

CCNP-第七篇-OSPF高级版(四)策略开头 今天讲NSSA和完全NSSA NSSA区域叫做非完全末节区域,这个东西都不知道命名的人怎么想的 因为完全NSSA区域叫做完全非完全末节区域,pleas,你人傻了吗? NSSA区域特点:过滤4,5类的LSA,同时会5类转为7类条目 7类在路由表里面是ON的 然后,7类除…

同步界面

设置FFS程序 当你下载、安装好后桌面会出现这两个图标。左边是主要的程序&#xff0c;右边软件用来设置自动同步。打开绿色图标的程序。 打开蓝色的设置按钮。 建议选择“文件时间和大小”。单纯的大小不能反映内容。比较文件内容又取决于硬盘速度。如果速度够快可以选择文件内…