Entity Framework 了解(一)
来源:互联网 发布:php 接口签名验证 编辑:程序博客网 时间:2024/05/16 11:08
必备概念了解
(在看这篇文章之前,希望大家对于下面这三个对象的概念有些基本的理解,对象名字上有链接)
EF:Entity Framework 利用了抽象化数据结构的方式,将每个数据库对象都转换成应用程序对象 (entity),而数据字段都转换为属性 (property),关系则转换为结合属性 (association),让数据库的 E/R 模型完全的转成对象模型,如此让程序设计师能用最熟悉的编程语言来调用访问。
ORM:对象关系映射
EDM:实体数据模型
ORM是一种思想,EF是ORM思想的产物之一,而EDM是EF实现ORM思想的核心。
EF的原理
- 在我们的项目中有一个扩展名为.edmx的文件,这就是EDM模式的表现形式。这个文件的本质是xml文件。
- 总览XML文件
- EDM—SSDL
描述了表、字段、关系、主键及索引等数据库中存在的概念
<!-- SSDL content --> <edmx:StorageModels> <Schema Namespace="Model.Store" Provider="System.Data.SqlClient" ProviderManifestToken="2008" 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="BasicOnClassStudentEntities"> <Key> <PropertyRef Name="OnClassStudentID" /> <PropertyRef Name="OnClassID" /> <PropertyRef Name="StudentID" /> </Key> <Property Name="Operator" Type="varchar" MaxLength="64" /> <Property Name="TimeStamp" Type="datetime" /> <Property Name="IsEnabled" Type="int" /> <Property Name="OnClassStudentID" Type="uniqueidentifier" Nullable="false" /> <Property Name="OnClassID" Type="uniqueidentifier" Nullable="false" /> <Property Name="StudentID" Type="uniqueidentifier" Nullable="false" /> </EntityType> <EntityContainer Name="ModelStoreContainer"> <EntitySet Name="BasicOnClassStudentEntities" EntityType="Self.BasicOnClassStudentEntities" store:Type="Tables" store:Schema="dbo"> <DefiningQuery>SELECT [BasicOnClassStudentEntities].[Operator] AS [Operator], [BasicOnClassStudentEntities].[TimeStamp] AS [TimeStamp], [BasicOnClassStudentEntities].[IsEnabled] AS [IsEnabled], [BasicOnClassStudentEntities].[OnClassStudentID] AS [OnClassStudentID], [BasicOnClassStudentEntities].[OnClassID] AS [OnClassID], [BasicOnClassStudentEntities].[StudentID] AS [StudentID]FROM [dbo].[BasicOnClassStudentEntities] AS [BasicOnClassStudentEntities]</DefiningQuery> </EntitySet> </EntityContainer> </Schema> </edmx:StorageModels>
DefiningQuery定义通过实体数据模型 (EDM) 内的客户端投影映射到数据存储视图的查询
- EDM—CSDL
定义的实体、主键、属性、关联等都是对应于.NET Framework中的类型
<!-- CSDL content --> <edmx:ConceptualModels> <Schema Namespace="Model" 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="BasicOnClassStudentEntities"> <Key> <PropertyRef Name="OnClassStudentID" /> <PropertyRef Name="OnClassID" /> <PropertyRef Name="StudentID" /> </Key> <Property Name="Operator" Type="String" MaxLength="64" FixedLength="false" Unicode="false" /> <Property Name="TimeStamp" Type="DateTime" Precision="3" /> <Property Name="IsEnabled" Type="Int32" /> <Property Name="OnClassStudentID" Type="Guid" Nullable="false" /> <Property Name="OnClassID" Type="Guid" Nullable="false" /> <Property Name="StudentID" Type="Guid" Nullable="false" /> </EntityType> <EntityContainer Name="Entities" annotation:LazyLoadingEnabled="true"> <EntitySet Name="BasicOnClassStudentEntities" EntityType="Self.BasicOnClassStudentEntities" /> </EntityContainer> </Schema> </edmx:ConceptualModels>
- EDM—MSL
将上面的SSDL和CSDL对应,主要包括CSDL属性与SSDL中列的对应
<!-- C-S mapping content --> <edmx:Mappings> <Mapping Space="C-S" xmlns="http://schemas.microsoft.com/ado/2009/11/mapping/cs"> <EntityContainerMapping StorageEntityContainer="ModelStoreContainer" CdmEntityContainer="Entities"> <EntitySetMapping Name="BasicOnClassStudentEntities"> <EntityTypeMapping TypeName="Model.BasicOnClassStudentEntities"> <MappingFragment StoreEntitySet="BasicOnClassStudentEntities"> <ScalarProperty Name="Operator" ColumnName="Operator" /> <ScalarProperty Name="TimeStamp" ColumnName="TimeStamp" /> <ScalarProperty Name="IsEnabled" ColumnName="IsEnabled" /> <ScalarProperty Name="OnClassStudentID" ColumnName="OnClassStudentID" /> <ScalarProperty Name="OnClassID" ColumnName="OnClassID" /> <ScalarProperty Name="StudentID" ColumnName="StudentID" /> </MappingFragment> </EntityTypeMapping> </EntitySetMapping> </EntityContainerMapping> </Mapping> </edmx:Mappings> </edmx:Runtime>
说明1:以上表中很重要的一个属性是MappingFragment中的StoreEntitySet属性,就像这个属性的说明中所说,其描述了CSDL的Entity对应到的SSDL的Entity的名称。这是实现下文EDM映射方案中第二条将一个概念模型的实体映射到多个存储模型的实体的关键设置。
说明2:Contain这个元素及其属性的作用是,当多个概念模型实体映射到一个存储模型实体时,该元素的属性决定了在什么情况下一个概念模型实体映射到指定的存储模型实体。
说明3:QueryView 元素定义概念模型中的实体与存储模型中的实体之间的只读映射。使用根据存储模型计算的 Entity SQL 查询定义此查询视图映射,并以概念模型中的实体表达结果集。同DefiningQuery定义的查询。此映射也是只读的。就是说如果想要更新此类EntitySet,也需要使用下文介绍存储过程时提到的定义更新实体的存储过程的方法,使用定义的存储过程来更新这样的EntitySet。当多对多关联在存储模型中所映射到的实体表示关系架构中的链接表时,必须为此链接表在AssociationSetMapping 元素中定义一个QueryView元素。定义查询视图时,不能在 AssociactionSetMapping 元素上指定 StorageSetName 属性。定义查询视图时,AssociationSetMapping 元素不能同时包含 EndProperty 映射。
- Entity Framework 了解(一)
- Entity Framework(一)基础
- Entity Framework 学习笔记(一)
- Entity Framework Code First (一)Conventions
- Entity Framework 6源码学习(一)
- Entity Framework学习(一)CodeFirst入门
- Entity FrameWork 一
- ADO.NET Entity Framework多库架构初探(一)
- MVC3+Entity Framework 实现投票系统(一)
- Entity Framework的表间关系实现篇(一)
- Entity Framework 4.1 Code First 学习之路(一)
- [UWP小白日记-11]在UWP中使用Entity Framework Core(Entity Framework 7)操作SQLite数据库(一)
- Entity Framework的核心 – EDM(Entity Data Model) 一
- [hystar整理]Entity Framework 教程 续一
- Entity Framework Demo(一) 简单搭建环境
- Entity Framework 教程(第一版)
- Entity Framework(2)数据库
- Entity Framework(3)新增
- Python Tornado 使用经验
- CronTrigger(转)
- wince的一些对sdk封装成c runtime库的实现
- 整理下iOS常用的三方库,以备查阅
- 摩托罗拉(Motorola) MC2180条码采集器 .NET开发 接入条码组件
- Entity Framework 了解(一)
- 图像开运算
- 在PHP中使用协程实现多任务调度
- A1.0.2 离线瓦片用ol3显示多功能地图
- tomcat如何以debug模式启动
- 如何使用pdb调试python程序
- python yield 学习笔记
- 深入理解共享元素变换(Shared Element Transition)-上
- AIX5.3中将Oracle SGA PIN在内存中的步骤