Entity Framework(一) 映射
ADO.NET Entity Framework通过Modeel First和DataBase First,提供了几个把数据库表映射到对象上的曾。通过Database First,可以从一个数据库架构开始,使用Visual Studio 项模版创建完整映射。还可以先用设计器(Model First)设计实体类,再把它映射到数据库上,在该数据库中,表和表之间的关系可以有完全不同的结构。
需要定义的层如下:
1、逻辑层--该层定义关系数据
2、概念层--该层定义.NET类
3、映射层--该层定义从.NET类到关系表和关系的映射。
(1)逻辑层--逻辑层由SSDL(存储架构定义语言定义,描述数据库表及其关系的结构。)
<edmx:StorageModels>
<Schema Namespace="ExtjsmvcModel.Store" Alias="Self" Provider="System.Data.SqlClient" ProviderManifestToken="2008" xmlns:store="http://schemas.microsoft.com/ado/2007/12/edm/EntityStoreSchemaGenerator" xmlns="http://schemas.microsoft.com/ado/2009/02/edm/ssdl">
<EntityContainer Name="ExtjsmvcModelStoreContainer">
<EntitySet Name="beian" EntityType="ExtjsmvcModel.Store.beian" store:Type="Tables" Schema="dbo" />
<EntitySet Name="Menu" EntityType="ExtjsmvcModel.Store.Menu" store:Type="Tables" Schema="dbo" />
<EntitySet Name="Users" EntityType="ExtjsmvcModel.Store.Users" store:Type="Tables" Schema="dbo" />
</EntityContainer>
<EntityType Name="beian">
<Key>
<PropertyRef Name="ID" />
</Key>
<Property Name="ID" Type="int" Nullable="false" StoreGeneratedPattern="Identity" />
<Property Name="kehu_name" Type="varchar" MaxLength="50" />
<Property Name="beianhao" Type="varchar" MaxLength="100" />
<Property Name="beianpass" Type="varchar" MaxLength="100" />
<Property Name="beianemail" Type="varchar" MaxLength="100" />
<Property Name="emailpass" Type="varchar" MaxLength="100" />
<Property Name="beianzh" Type="varchar" MaxLength="100" />
<Property Name="beianzhpa" Type="varchar" MaxLength="100" />
</EntityType>
<EntityType Name="Menu">
<Key>
<PropertyRef Name="ID" />
</Key>
<Property Name="ID" Type="int" Nullable="false" StoreGeneratedPattern="Identity" />
<Property Name="Menuname" Type="varchar" MaxLength="100" />
<Property Name="ParentID" Type="int" />
<Property Name="cls" Type="varchar" MaxLength="100" />
</EntityType>
<EntityType Name="Users">
<Key>
<PropertyRef Name="UserId" />
</Key>
<Property Name="UserId" Type="int" Nullable="false" />
<Property Name="UserName" Type="varchar" MaxLength="100" />
<Property Name="UserPwd" Type="varchar" MaxLength="100" />
</EntityType>
</Schema>
</edmx:StorageModels>
(2)概念层(定义.NET类)该层用CSDL--概念架构定义语言定义。
<edmx:ConceptualModels>
<Schema Namespace="ExtjsmvcModel" Alias="Self" xmlns:annotation="http://schemas.microsoft.com/ado/2009/02/edm/annotation" xmlns="http://schemas.microsoft.com/ado/2008/09/edm">
<EntityContainer Name="ExtjsmvcEntities" annotation:LazyLoadingEnabled="true">
<EntitySet Name="beian" EntityType="ExtjsmvcModel.beian" />
<EntitySet Name="Menu" EntityType="ExtjsmvcModel.Menu" />
<EntitySet Name="Users" EntityType="ExtjsmvcModel.Users" />
</EntityContainer>
<EntityType Name="beian">
<Key>
<PropertyRef Name="ID" />
</Key>
<Property Name="ID" Type="Int32" Nullable="false" annotation:StoreGeneratedPattern="Identity" />
<Property Name="kehu_name" Type="String" MaxLength="50" Unicode="false" FixedLength="false" />
<Property Name="beianhao" Type="String" MaxLength="100" Unicode="false" FixedLength="false" />
<Property Name="beianpass" Type="String" MaxLength="100" Unicode="false" FixedLength="false" />
<Property Name="beianemail" Type="String" MaxLength="100" Unicode="false" FixedLength="false" />
<Property Name="emailpass" Type="String" MaxLength="100" Unicode="false" FixedLength="false" />
<Property Name="beianzh" Type="String" MaxLength="100" Unicode="false" FixedLength="false" />
<Property Name="beianzhpa" Type="String" MaxLength="100" Unicode="false" FixedLength="false" />
</EntityType>
<EntityType Name="Menu">
<Key>
<PropertyRef Name="ID" />
</Key>
<Property Name="ID" Type="Int32" Nullable="false" annotation:StoreGeneratedPattern="Identity" />
<Property Name="Menuname" Type="String" MaxLength="100" Unicode="false" FixedLength="false" />
<Property Name="ParentID" Type="Int32" />
<Property Name="cls" Type="String" MaxLength="100" Unicode="false" FixedLength="false" />
</EntityType>
<EntityType Name="Users">
<Key>
<PropertyRef Name="UserId" />
</Key>
<Property Name="UserId" Type="Int32" Nullable="false" />
<Property Name="UserName" Type="String" MaxLength="100" Unicode="false" FixedLength="false" />
<Property Name="UserPwd" Type="String" MaxLength="100" Unicode="false" FixedLength="false" />
</EntityType>
</Schema>
</edmx:ConceptualModels>
(3)映射层(映射层使用MSL--映射规范语言 把CSDL中的实体类型定义映射到SSDL中)
<edmx:Mappings>
<Mapping Space="C-S" xmlns="http://schemas.microsoft.com/ado/2008/09/mapping/cs">
<EntityContainerMapping StorageEntityContainer="ExtjsmvcModelStoreContainer" CdmEntityContainer="ExtjsmvcEntities">
<EntitySetMapping Name="beian">
<EntityTypeMapping TypeName="ExtjsmvcModel.beian">
<MappingFragment StoreEntitySet="beian">
<ScalarProperty Name="ID" ColumnName="ID" />
<ScalarProperty Name="kehu_name" ColumnName="kehu_name" />
<ScalarProperty Name="beianhao" ColumnName="beianhao" />
<ScalarProperty Name="beianpass" ColumnName="beianpass" />
<ScalarProperty Name="beianemail" ColumnName="beianemail" />
<ScalarProperty Name="emailpass" ColumnName="emailpass" />
<ScalarProperty Name="beianzh" ColumnName="beianzh" />
<ScalarProperty Name="beianzhpa" ColumnName="beianzhpa" />
</MappingFragment>
</EntityTypeMapping>
</EntitySetMapping>
<EntitySetMapping Name="Menu">
<EntityTypeMapping TypeName="ExtjsmvcModel.Menu">
<MappingFragment StoreEntitySet="Menu">
<ScalarProperty Name="ID" ColumnName="ID" />
<ScalarProperty Name="Menuname" ColumnName="Menuname" />
<ScalarProperty Name="ParentID" ColumnName="ParentID" />
<ScalarProperty Name="cls" ColumnName="cls" />
</MappingFragment>
</EntityTypeMapping>
</EntitySetMapping>
<EntitySetMapping Name="Users">
<EntityTypeMapping TypeName="ExtjsmvcModel.Users">
<MappingFragment StoreEntitySet="Users">
<ScalarProperty Name="UserId" ColumnName="UserId" />
<ScalarProperty Name="UserName" ColumnName="UserName" />
<ScalarProperty Name="UserPwd" ColumnName="UserPwd" />
</MappingFragment>
</EntityTypeMapping>
</EntitySetMapping>
</EntityContainerMapping>
</Mapping>
</edmx:Mappings>
用设计器和CSDL创建的实体类一般派生自基类EntityObject。
例如Users类派生自基类EntityObject,并为其数据定义属性,如UserName。这些属性的set访问器以两种不同的方式触发信息的改变:
一种方式是调用EntityObject基类的ReportPropertyChanging()和ReportPropertyChanged()方法。调用这些方法会使用INotifyProperty Changing和INotifyPropertyChanged接口,以通知每个客户端用这些接口的事件来注册。
另一种方式使用用部分方法,如OnTitleChanging()和OnTitleChanged()。他们默认没有实现方式,但可以在这个类的自定义扩展中实现他们。
Entity Framework(一) 映射的更多相关文章
- asp.net mvc常用的数据注解和验证以及entity framework数据映射
终于有时间整理一下asp.net mvc 和 entity framework 方面的素材了. 闲话少说,步入正题: 下面是model层的管理员信息表,也是大伙比较常用到的,看看下面的代码大伙应该不会 ...
- 将 Entity Framework、LINQ 和 Model-First 用于 Oracle 数据库
目的 本教程介绍如何使用 Entity Framework.语言集成查询 (LINQ),以及如何对 Oracle 数据库使用 Model-First 以生成数据定义语言 (DDL) 脚本. 所需时间 ...
- Entity Framework中的主从表关系的使用
其关系图: 我们使用Entity Framework生成映射关系如下: 其中author表中的books导航属性为一个集合,表示当前作者的书. 在页面中我们可以使用如下代码来实现: 代码中author ...
- 第三篇:Entity Framework CodeFirst & Model 映射 续篇 EntityFramework Power Tools 工具使用
上一篇 第二篇:Entity Framework CodeFirst & Model 映射 主要介绍以Fluent API来实作EntityFramework CodeFirst,得到了大家一 ...
- 《Entity Framework 6 Recipes》中文翻译系列 (8) -----第二章 实体数据建模基础之继承关系映射TPT
翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 2-8 Table per Type Inheritance 建模 问题 你有这样一 ...
- 《Entity Framework 6 Recipes》中文翻译系列 (9) -----第二章 实体数据建模基础之继承关系映射TPH
翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 2-10 Table per Hierarchy Inheritance 建模 问题 ...
- 《Entity Framework 6 Recipes》中文翻译系列 (10) -----第二章 实体数据建模基础之两实体间Is-a和Has-a关系建模、嵌入值映射
翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 2-11 两实体间Is-a和Has-a关系建模 问题 你有两张有Is-a和Has-a ...
- 《Entity Framework 6 Recipes》中文翻译系列 (35) ------ 第六章 继承与建模高级应用之TPH继承映射中使用复合条件
翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 6-11 TPH继承映射中使用复合条件 问题 你想使用TPH为一张表建模,建模中使 ...
- 《Entity Framework 6 Recipes》中文翻译系列 (36) ------ 第六章 继承与建模高级应用之TPC继承映射
翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 6-12 TPC继承映射建模 问题 你有两张或多张架构和数据类似的表,你想使用TP ...
- Entity Framework Code First属性映射约定
Entity Framework Code First与数据表之间的映射方式有两种实现:Data Annotation和Fluent API.本文中采用创建Product类为例来说明tity Fram ...
随机推荐
- hdu 4714 树形DP
思路:dp[i][0]表示第i个节点为根的子树变成以i为一头的长链最小的花费,dp[i][0]表示表示第i个节点为根的子树变成i不是头的长链最小花费. 那么动态方程也就不难想了,就是要分几个情况处理, ...
- vijos 1053Easy sssp
P1053Easy sssp Accepted 标签:图结构 最短路 描述 输入数据给出一个有N(2 <= N <= 1,000)个节点,M(M <= 100,000)条边的 ...
- 【转】唱吧CEO陈华:创业四年,我积累的7点管理经验
现象级产品“唱吧”至今拥有令人羡慕的用户数量,3亿.而这一切,却用了短短不到四年时间.唱吧团队如何应对越来越复杂的市场变化:怎样用人,才能不断激励新老员工做出更棒的业绩:CEO陈华又如何用“下大雪”模 ...
- Wordpress 运行缓慢的解决方法
原因为wordpress 3.8之后采用google字体所致. 修改 functions.php //禁用Open Sans class Disable_Google_Fonts { pub ...
- Table of Contents - TCP/IP
网络访问层 Ethernet II 网际层 IP IPv4 报文格式 ICMP ICMP 报文分析 ping: 向网络主机发送 ICMP ECHO_REQUEST 包 ARP ARP 过程 arp 命 ...
- Part 30 to 31 Talking about Interfaces in c#
Part 30 Interfaces in c# We create interfaces using interface keyword. just like classes interfaces ...
- Part 45 to 47 Talking about Enums in C#
Part 45 C# Tutorial Why Enums Enums are strongly typed constants. If a program uses set of integ ...
- 遇到的 autoresizingMask 相关的问题
1.前言 当一个控件设置好 frame,然后出现会 frame 显示不准或是跟随父控件的变化而变化了,你就要考虑是否是 autoresizing 的问题了 当在 xib 中布局时,报 NSAutore ...
- Objective-C 【Category-非正式协议-延展】
------------------------------------------- 类别(Category)的声明和实现 实质:类别又叫类目,它其实是对类的一个拓展!但是他不同于继承后的拓展! ...
- 【学习笔记】【C语言】循环结构-for
1.使用: for (语句1; 条件; 语句2) { 循环体 } 语句1:初始化语句 语句2:增量语句(执行完循环体后再执行的语句) 1.for一开始就会执行一次语句1(整个for循环 ...