[hystar整理]Entity Framework 教程 续二

2024-02-29 02:58

本文主要是介绍[hystar整理]Entity Framework 教程 续二,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

EDM之MSL 这个文件即上面所述的CSDL与SSDL的对应,主要包括CSDL中属性与SSDL中列的对应。 
<!-- C-S mapping content --> 
<edmx:Mappings> 
<Mapping Space="C-S" xmlns="urn:schemas-microsoft-com:windows:storage:mapping:CS"> 
<EntityContainerMapping StorageEntityContainer="ASSModelStoreContainer" CdmEntityContainer="ASSEntities"> 
<EntitySetMapping Name="Assignments"> 
<EntityTypeMapping TypeName="IsTypeOf(ASSModel.Assignments)"> 
<MappingFragment StoreEntitySet="Assignments"> 
<ScalarProperty Name="QuesFileName" ColumnName="QuesFileName" /> 
<ScalarProperty Name="AssDes" ColumnName="AssDes" /> 
<ScalarProperty Name="AssID" ColumnName="AssID" /> 
<ScalarProperty Name="AssName" ColumnName="AssName" /> 
<ScalarProperty Name="Deadline" ColumnName="Deadline" /> 
<ScalarProperty Name="QuesFileUrl" ColumnName="QuesFileUrl" /> 
</MappingFragment> 
</EntityTypeMapping> 
</EntitySetMapping> 
<!-- 省略EntitySetMapping若干 --> 
 
<!-- 保留对应于CSDL与SSDL的FunctionImportMapping --> 
<FunctionImportMapping FunctionImportName="GETHOUSEWORKDONE" FunctionName="ASSModel.Store.GETHOUSEWORKDONE" /> 
 
<AssociationSetMapping Name="FK_UpAssignments_Assignments" TypeName="ASSModel.FK_UpAssignments_Assignments" StoreEntitySet="UpAssignments"> 
<EndProperty Name="Assignments"> 
<ScalarProperty Name="AssID" ColumnName="AssID" /> 
</EndProperty> 
<EndProperty Name="UpAssignments"> 
<ScalarProperty Name="UpAssID" ColumnName="UpAssID" /> 
</EndProperty> 
</AssociationSetMapping> 
<!-- 省略AssociationSetMapping若干 --> 
 
</EntityContainerMapping> 
</Mapping> 
</edmx:Mappings>
    如上代码所示,MSL的根节点为Mapping,其中可以包含多个EntityContainerMapping(上例只有一个),每一个EntityContainerMapping对应着两个分别来自CSDL与SSDL的EntityContainer。这个EntityContainerMapping就是描述这两个EntityContainer间的对应。下面再给出一段代码展示EntityContainerMapping的基本格式。 
<EntityContainerMapping StorageEntityContainer="" CdmEntityContainer=""> 
<EntitySetMapping> 
<EntityTypeMapping> 
<MappingFragment> 
<ScalarProperty /> 
</MappingFragment> 
<ModificationFunctionMapping> 
<InsertFunction /> 
<DeleteFunction /> 
<UpdateFunction /> 
</ ModificationFunctionMapping> 
</EntityTypeMapping> 
</EntitySetMapping> 
 
<AssociationSetMapping> 
<EndProperty> 
<ScalarProperty /> 
</EndProperty> 
</AssociationSetMapping> 
 
<FunctionImportMapping /> 
</EntityContainerMapping>
同上文,下面列出这些节点的属性 
EntityContainerMapping
 StorageEntityContainer
SSDL中的EntityContainer名称
CdmEntityContainer
CSDL中的EntityContainer名称
 EntitySetMapping
EntityContainer中每个EntitySet的对应
Name
EntitySetMapping的名称
 EntityTypeMapping
描述CSDL中EntityType与SSDL中EntityType的对应
Name
EntityTypeMapping的名称
TypeName
对应CSDL内Entity的名称 – 格式:IsTypeOf(<名称>) 
注:这个类及其子类将共享此EntityTypeMapping
 MappingFragment
描述属性及字段间的对应
StoreEntitySet
SSDL中的EntitySet名称 
(由于CSDL中一个EntitySet可以对应多个SSDL中的EntitySet)
 ScalarProperty
属性与字段对应
Name
CSDL中的属性名
ColumnName
SSDL中的字段名称
 Condition
详见说明2
ColumnName
列名
Value

ModificationFunctionMapping
CUD对应的存储过程
 InsertFunction/ UpdateFunction / DeleteFunction
FunctionName
 QueryView
  Entity SQL
AssociationSetMapping
描述CSDL中的AssociationSet与SSDL中的EntitySet的对应关系
Name
AssociationSetMapping的名称
StoreEntitySet
SSDL中EntitySet的名称
TypeName
CSDL中AssociationSet的名称
 EndProperty
一个AssociationSetMapping中有两个EndProperty 
分别对应CSDL中两个End Role
Name
EndProperty的名称
 ScalarProperty
关系属性对应
Name
CSDL中的属性名
ColumnName
SSDL中的字段名称
ModificationFunctionMapping
C/D对应的存储过程
 InsertFunction/ DeleteFunction
FunctionName
 QueryView
  EntitySQL
FunctionImportMapping
用于描述CSDL与SSDL间函数及函数参数的对应(详见下文存储过程部分)
 
说明1 :以上表中很重要的一个属性是MappingFragment中的StoreEntitySet属性,就像这个属性的说明中所说,其描述了CSDL的Entity对应到的SSDL的Entity的名称。这是实现下文EDM映射方案中第二条将一个概念模型的实体映射到多个存储模型的实体的关键设置。 
说明2 :Contain这个元素及其属性的作用是,当多个概念模型实体映射到一个存储模型实体时,该元素的属性决定了在什么情况下一个概念模型实体映射到指定的存储模型实体。 
说明3 :QueryView 元素定义概念模型中的实体与存储模型中的实体之间的只读映射。使用根据存储模型计算的 Entity SQL 查询定义此查询视图映射,并以概念模型中的实体表达结果集。同DefiningQuery定义的查询。此映射也是只读的。就是说如果想要更新此类EntitySet,也需要使用下文介绍存储过程时提到的定义更新实体的存储过程的方法,使用定义的存储过程来更新这样的EntitySet。当多对多关联在存储模型中所映射到的实体表示关系架构中的链接表时,必须为此链接表在AssociationSetMapping 元素中定义一个QueryView元素。定义查询视图时,不能在 AssociactionSetMapping 元素上指定 StorageSetName 属性。定义查询视图时,AssociationSetMapping 元素不能同时包含 EndProperty 映射。 
EDM中存储过程的设计 目前版本(VS2008SP1)的实体设计器对存储过程支持不完善,只能手工编辑这三个文件中的存储过程部分,包括: 
  1. CSDL中的FunctionImport元素,其属性及说明如下所示: 
    FunctionImport
     Name
    (在程序中调用的)函数的名称
    EntitySet
    当函数返回实体对象时,需使用此属性指定对应的EntitySet
    ReturnType
    函数返回值的类型
     Parameter
    以下用于参数子节点中的属性定义
    Name
    参数的名称
    Type
    参数的类型
    Mode
    参数的传递方式(In, Out或InOut)
    MaxLength
    参数值最大长度
    Precision
    参数值的精确度,用于数字类型
    Scale
    浮点数小数位
  2. SSDL中的Function节 
    Function
     Name
    存储过程名称
    Aggregate
    是否为聚合函数(存储过程)
    BuiltIn
    是否为内建存储过程
    NiladicFunction
    是否为无参数存储过程
    IsComposable
    True为自定义函数,False为存储过程
    ParameterTypeSemantics
    参数类型转换方式
    ReturnType
    存储过程返回类型
  3. MSL中的FunctionImportMapping节 
    FunctionImportMapping
     FunctionImportName
    CSDL中FunctionImport的名称
    FunctionName
    SSDL中Function Element的名称
    这面总结的是用于返回实体对象的查询(存储过程)。 
下面分别描述一下有关修改操作的存储过程的使用: 
  1. 使用插入、更新或删除实体数据的存储过程,需要修改如下两个文件:
    SSDL,对其的修改要求与上文表中列出的一致: 
    MSL,需要对一下节点进行定义: 
EntityContainerMapping
  EntitySetMapping
EntityContainer中每个EntitySet的对应
 EntityTypeMapping
描述CSDL中EntityType与SSDL中EntityType的对应
 ModificationFunctionMapping
CUD对应的存储过程
  InsertFunction/ UpdateFunction / DeleteFunction
FunctionName
  
  1. 使用创建或删除在数据源中使用链接表实现的实体类型之间的多对多关系的存储过程需要修改如下两个文件:
    SSDL,对其的修改要求与上文表中列出的一致: 
    MSL,需要对一下节点进行定义: 
EntityContainerMapping
  AssociationSetMapping
描述CSDL中的AssociationSet与SSDL中的EntitySet的对应关系
 ModificationFunctionMapping
C/D对应的存储过程
  InsertFunction/ DeleteFunction
FunctionName
  
EDM中ComplexType的设计 再谈Complex Type,上文大致介绍了复杂类型的概念及作用,现在开始看一下具体怎样实现。前文已经提到实现复杂类型关键是在CSDL与MSL,而与SSDL无关。 
    首先应该在CSDL中怎加这样一节,此节与<EntityType></EntityType>节同级,其结构如下: 
<ComplexType> 
<Property /> 
</ComplexType>
节点及其属性含义如下: 
ComplexType
复杂类型
Name
复杂类型的名称
 Property
属性
Name
属性名
Type
属性类型
Nullable
是否允许null
MaxLength
属性最大长度
FixLength
是否固定长度
    然后在MSL中<MappingFragment>下与<ScalarProperty />同级的位置添加如下节: 
<ComplexProperty> 
<ScalarProperty /> 
</ComplexProperty>
具体的节及其属性含义如下: 
ComplexProperty
复杂类型属性
Name
复杂类型属性名称
TypeName
CSDL中定义的ComplexType的名称。格式 "CSDN_Namespace.ComplexTypeName"
 ScalarProperty
关系属性对应
Name
CSDL中的属性名
ColumnName
SSDL中的字段名称
 
实体数据模型映射方案 实体框架支持各种方式用于在实体数据模型 (EDM) 中将概念模型映射到关系数据。有关更多信息,请参见  实体框架中的数据建模 。 
实体框架当前支持以下实体数据模型 (EDM) 映射方案。 
编号
映射方案 
说明 
1
简单映射
在此映射方案中,概念模型中的每个实体都映射到存储模型中的单个表。这是实体数据模型工具所生成的默认映射。
2
实体拆分
在此映射方案中,概念模型中单个实体的属性映射到两个或更多基础表中的列。在此方案中,表必须共享公共主键。 
其设计方式见EDM之MSL部分说明1。
3
存储模型中的水平分区
在此映射方案中,概念模型中的单个实体类型映射到具有相同架构的两个或更多表。实体基于概念模型中定义的条件映射到表中。 
使用场合:使一个概念模型的实体映射到不同数据源的存储模型的实体。 
另见:EDM之MSL部分说明2。
4
概念模型中的水平分区
在此映射方案中,概念模型中具有相同属性的多个实体类型映射到同一个表。条件子句用于指定表中的数据分别属于哪个实体类型。此映射类似于类型5。 
这种方式也用到MSL中的Conditon来决定映射关系,见EDM之MSL部分说明2。
5
每个层次结构一个表继承
在此映射方案中,继承层次结构中的所有类型都映射到同一个表。条件子句用于定义实体类型。 
见EDM之MSL部分说明2。
6
每种类型一个表继承
在此映射方案中,所有类型都分别映射到各自的表。仅属于某个基类型或派生类型的属性存储在映射到该类型的一个表中。
7
每种具体类型一个表继承
在此映射方案中,每个非抽象类型分别映射到不同的表。所有这些表所包含的列必须映射到派生类型的所有属性(包括从基类型继承的属性)。
8
每种类型多个实体集
在此映射方案中,单个实体类型在概念模型中以两个或更多独立的实体集进行表示。每个实体集分别映射到存储模型中的一个单独的表。 
其设计方式见EDM之MSL部分说明1。
9
复杂类型
复杂类型是没有键属性的实体类型的非标量属性。复杂类型可以包含其他嵌套的复杂类型。复杂类型映射到存储模型中的表。 
复杂类型在上文有单独介绍
10
函数导入映射
在此方案中,存储模型中的存储过程映射到概念模型中的  FunctionImport  元素。执行此函数可使用映射的存储过程返回实体数据。 
见上文存储过程部分
11
修改函数映射
在此方案中,在存储模型中定义用于插入、更新和删除数据的存储过程。这些函数是为实体类型定义的,以便为特定实体类型提供更新功能。 
见上文存储过程部分
12
定义查询映射
在此方案中,在存储模型中定义表示数据源中的表的查询。在映射到 SQL Server 数据库时,查询以数据源的本机查询语言(如 Transact-SQL)表示。此  DefiningQuery  元素映射到概念模型中的实体类型。查询以特定于存储的查询语言进行定义。 
上文EDM之SSDL部分最后详细介绍了这种设计的相关问题
13
查询视图映射
在此方案中,会在概念模型中的实体类型与存储模型中的关系表之间定义只读映射。此映射基于对存储模型进行的 Entity SQL 查询定义。 
上文EDM之MSL中说明三对这种设计的相关问题有介绍。
14
AssociationSet 映射
关联定义实体之间的关系。在具有一对一或一对多关联的简单映射中,在概念模型中定义关系的关联会映射到存储模型中的关联。还支持以下更高级的关联集映射: 
多对多关联。关联的两端都映射到存储模型中的链接表。 
自关联。此映射支持具有相同类型的两个实体之间的关联,如一个 Employee 与另一个 Employee 之间的关联。 
派生类型之间的关联。此映射支持一个层次结构中的派生类型与另一个层次结构中的派生类型之间的关联。
 

这篇关于[hystar整理]Entity Framework 教程 续二的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/757373

相关文章

Elasticsearch 在 Java 中的使用教程

《Elasticsearch在Java中的使用教程》Elasticsearch是一个分布式搜索和分析引擎,基于ApacheLucene构建,能够实现实时数据的存储、搜索、和分析,它广泛应用于全文... 目录1. Elasticsearch 简介2. 环境准备2.1 安装 Elasticsearch2.2 J

Linux系统中卸载与安装JDK的详细教程

《Linux系统中卸载与安装JDK的详细教程》本文详细介绍了如何在Linux系统中通过Xshell和Xftp工具连接与传输文件,然后进行JDK的安装与卸载,安装步骤包括连接Linux、传输JDK安装包... 目录1、卸载1.1 linux删除自带的JDK1.2 Linux上卸载自己安装的JDK2、安装2.1

Linux卸载自带jdk并安装新jdk版本的图文教程

《Linux卸载自带jdk并安装新jdk版本的图文教程》在Linux系统中,有时需要卸载预装的OpenJDK并安装特定版本的JDK,例如JDK1.8,所以本文给大家详细介绍了Linux卸载自带jdk并... 目录Ⅰ、卸载自带jdkⅡ、安装新版jdkⅠ、卸载自带jdk1、输入命令查看旧jdkrpm -qa

Java使用Curator进行ZooKeeper操作的详细教程

《Java使用Curator进行ZooKeeper操作的详细教程》ApacheCurator是一个基于ZooKeeper的Java客户端库,它极大地简化了使用ZooKeeper的开发工作,在分布式系统... 目录1、简述2、核心功能2.1 CuratorFramework2.2 Recipes3、示例实践3

springboot简单集成Security配置的教程

《springboot简单集成Security配置的教程》:本文主要介绍springboot简单集成Security配置的教程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录集成Security安全框架引入依赖编写配置类WebSecurityConfig(自定义资源权限规则

MySQL Workbench 安装教程(保姆级)

《MySQLWorkbench安装教程(保姆级)》MySQLWorkbench是一款强大的数据库设计和管理工具,本文主要介绍了MySQLWorkbench安装教程,文中通过图文介绍的非常详细,对大... 目录前言:详细步骤:一、检查安装的数据库版本二、在官网下载对应的mysql Workbench版本,要是

通过Docker Compose部署MySQL的详细教程

《通过DockerCompose部署MySQL的详细教程》DockerCompose作为Docker官方的容器编排工具,为MySQL数据库部署带来了显著优势,下面小编就来为大家详细介绍一... 目录一、docker Compose 部署 mysql 的优势二、环境准备与基础配置2.1 项目目录结构2.2 基

Linux安装MySQL的教程

《Linux安装MySQL的教程》:本文主要介绍Linux安装MySQL的教程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux安装mysql1.Mysql官网2.我的存放路径3.解压mysql文件到当前目录4.重命名一下5.创建mysql用户组和用户并修

Mysql中深分页的五种常用方法整理

《Mysql中深分页的五种常用方法整理》在数据量非常大的情况下,深分页查询则变得很常见,这篇文章为大家整理了5个常用的方法,文中的示例代码讲解详细,大家可以根据自己的需求进行选择... 目录方案一:延迟关联 (Deferred Join)方案二:有序唯一键分页 (Cursor-based Paginatio

最新Spring Security实战教程之Spring Security安全框架指南

《最新SpringSecurity实战教程之SpringSecurity安全框架指南》SpringSecurity是Spring生态系统中的核心组件,提供认证、授权和防护机制,以保护应用免受各种安... 目录前言什么是Spring Security?同类框架对比Spring Security典型应用场景传统