编程三大核心内容之一:数据处理

ADO.NET Entity Framework 是对象-关系映射架构,使用CSDL概念架构定义语言和SSDL存储架构定义语言给出数据库和实体类之间的映射信息。这个架构是现阶段最易使用的高层次的数据处理方案。

Visual Studio集成开发环境 自带的 实体数据模型设计器 使用.edmx文件保存信息,生成 CSDL概念架构定义语言.csdl文件、SSDL存储架构定义语言.ssdl文件和MSL映射规范语言.msl文件。

一、概念层csdl

1.杂项

实体容器:System.Data.Objects.ObjectContext , System.Data.Entity.DbContext

实体数据模型工具:Visual Studio内置映射和建模工具(Code First使用数据注释和fluent API)

实体SQL命令:EntityCommand

管理事务:System.Transaactions, EntityTransaction

基元类型:PrimitiveType –>IExtendedDataRecord obj.GetValue(index)

有结构类型:StructuralType –>

IExtendeddDataRecord record;

int count= record.DatarecordInfo.FieldMetadata.Count;

int index=0;

record.GetName(index);

if(record.IsDBNull(index) == false){

BuiltInTypeKind fieldTypeKindd = record.DataRecordInfo.FiedMetadata[index].FieldType.TypeUsage.EdmType.BuiltInTypeKind;

if(fieldTypeKind == BuiltInTypeKind.PrimitiveType) record.GetValue(index);}

地址类型:RefType –>

if(record.IsDBNull(index)==false){

if(fieldTypeKind == BuiltInTypeKind.RefType){

EntityKey key = record.GetValue(index) as EntityKey;

key.EntitySetName;

foreach( EntityKeyMember keyMember in key.EntityKeyValues){

keyMember.Key;

keyMember.Value;}}}

复杂类型:DbDataRecord –>

DbDataRecord r;

for (int i =0; i < r.FieldCount; i++) r.getValue( i );

嵌套集合:->

EntityDataReader rdr ;

rdr.Read();

DbDataReader reader = rer.GetDataReader( index);

reader.Read();

reader[“ID”];

reader[“date”];

2.实体数据模型:

实体类型、关联类型、属性

命名空间:<Schema Namespce=”” />

<Using Namespace=”” Aliass=”” />

基元类型

Binary

Boolean

Byte

DateTime 日期和时间

DateTimeOffset 相对GMT的分钟偏移量

Decimal

Double

Float

Guid 16字节唯一标识符

Int16

Int32

Int64

SByte

String

Time 当天的时间

继承:根类型须有实体键;不支持多重继承;继承为实现继承不能改写基类。

关联:1.名称;2.两个关联端;3.关联操作。

<Association Name=””>

<End Type=”实体类型” Role=”关联端名称” Multiplicity=”*” />

<End Type=”实体类型” Multiplicity=”1”>

<OnDelete Action=”Cascade” />

</End>

</Association>

关联集:1.关联集名称;2.要包含其实例的关联;3.两个关联集端;4.同一个关联可以有多个关联集,但关联集不能共享广联集端。

<EntityContainer Nmae=”BooksContainer”> //容器

<EntitySet Name=”Books” EntityType=”BooksModel.Book” /> //实体集

<EntitySet Name=”Publishers” EntityType=”BooksModel.Author” /> //实体集

<AssociationSet Name=”PublishedBy” Association=”BooksModel.PublishedBy”> //关联集和关联

<End Role=”Book” EntitySet=”Books” /> //关联集端

<End Role=”Publisher” EntitySet=”Publishers” /> //关联集端

</AssociationSet>

</EntityContainer>

复杂类型:1.名称;2.属性;3.不能独立存在,不能参与关联

<ComplexType Name=”Adderess”>

<Property Type=”String” Name=”StreetAddress” Nullable=”false” />

<Property Type=”String” Name=”City” Nullable=”false” />

</ComplexType>

实体类型:1.必须具备实体键;2.属性;3.导航(关联)属性;4.类型和键值相同才是相等

<EntityType Nmae=”Publisher”>

<Key>

<PropertyRef Nmae=”Id” />

</Key>

<Property Type=”Int32” Name=”Id”Nullable=”false” />

<Property Type=”BooksModel.Address” Name=”Address” Nullable=”false” />

<NavigationProperty Name=”Books” Relationship=”BooksModel.Publishedby” FromRole=”Publisher” ToRole=”Book” />

</EntityType>

实体容器:1.实体集、关联集、函数导入的逻辑分组。

<EntityContainer Name=”BooksContainer” >

<EntitySet Name=”Books” EntityType=”BooksModel.Book” />

<EntitySet Name=”Publishers” EntityType=”BooksModel.Publisher”/>

<AssociationSet Name=”PublishedBy” Association=”BooksModel.PublishedBy”>

<End Role=”book” EntitySet=”Books” />>

<End Role=”Publisher” EntitySet=”Publishers” />

</AssociationSet>

</EntityContainer>

实体键:1.由一组不为null且不可变的基元类型属性组成;2.实体键必须在根类中定义

<Key>

<PropertyRef Name=”名称” />

</Key>

外键:1.当两个实体中有一个类型具有外键属性时,将使用引用完整性约束来定义两个实体类型之间的关联。

引用完整性约束:1.引用另一个实体类型的实体键的实体是依赖端;2.被引用的是主体端;3.依赖端配备一组引用主体端实体键的属性;4.在关联中定义引用完整性约束。

<Association Name=”PublishedBy”>

<End Type=”BooksModel.Book” Role=”Book” Multiplicity=”*” />

<End Type=”BooksModel.Publisher” Role=”Pbulisher” Multiplicity=”1” />

<ReferentialConstraint>    //约束

<Principal Role=”Publisher”>  //主体端

<PropertyRef Name=”Id” />  //主体端实体键

</Principal>

<Dependent Role=”Book”> //依赖端

<PropertyRef Name=”PublisherId” /> //依赖端属性引用主体端实体键

</Dependent>

</ReferentialConstraint>

</Asscociation>

导航(关联)属性:1.名称;2.关联;3.关联端

<NavigationProperty Name=”名称” Relationship=”关联” FromRole=”近端” ToRole=”远端” />

实体集:1.实体键在该集中唯一;2.实例不存在于其他实体集中;3.概念模型中的实体类型不必都定义实体集。

属性:1.属性名;2.属性类型;3.一组方面(细则)。

<Property Type=”类型” Name=”名称” Nullable=”方面” />

方面(细则)

Collation        排序的序列             适用String

ConcurrencyMode        开放式并发检查

Default          默认值

FixedLength   长度是否可变          适用于Binary、String

MaxLength     最大长度                适用于Binary、String

Nullable          是否可null

Precision        位数                      适用于Decimal、DateTime、DateTimeOffset、Time

Scale             小数位数                适用于Decimal

Unicode         是否存储为Unicode  适用于String

 

模型声明函数:在概念模型中声明,在承载或存储环境中定义。

<FunctionImport Name=”UpdatePublisher”>

<Parameter Nmae=”PublilsherId” Mode=”In” Type=”Int32” />

<Parameter Name=”PblisherName” Mode=”In” Type=”String” />

</FunctionImport>

模型定义函数:用Entity SQl定义。

<Function Name=”GetYearsInPrint” ReturnType=”Edm.Int32”>

<Parameter Name=”book” Type=”BooksModel.Book” />

<DefiningExpression>

Year(CurrentDateTime()) – Year(case(book.PublishedDate as DateTime))

</DefiningExpression>

</Function>

3.快速参考

1 Association(关联).Name(关联名)

  1.1 Documentation (文档信息)

    1.1.1 Summary (简短说明)

    1.1.2 LongDescription(详细说明)

  1.2 End (端) .Type(实体类型) .Role(名称) .Multiplicity (重数)

    1.2.1 OnDelete (定义运行时而非数据源的联动删除) .Action (是否联动删除 Cascade | None)

  1.3 ReferentialConstraint (引用完整性约束)

    1.3.1 Principal (主体端).Role (端名)

      1.3.1.1 PropertyRef (主体端键).Name(键名)

    1.3.2 Dependent (依赖端).Role(端名)

      1.3.2.1 PropertyRef .Name

  1.4 批注元素

2 AssocictionSet (关联集).Name(关联集名称) .Association(关联类型)

  2.1 End  .EntitySet(实体集) .Role(端名)

3 Function (函数) .Name (函数名) .ReturnType (返回类型)

  3.1 Parameter (参数) .Name(参数名) .Type(基元类型|实体类型|复杂类型|行类型|引用类型) .Mode(In | Out | InOut) .MaxLength(最大长度) .Precision(精度) .Scale(小数位数) .Nullable(是否可null) .DefaultValue(默认值) .FixedLength(是否固定长度) .Unicode (是否Unicode) .Collation(排序序列字符串)

  3.2 DefiningExpression (实体SQL)

  3.3 ReturnType (返回类型).ReturnType(返回类型)

    3.3.1 CollectionType(集合类型)  .Type(类型) .Nullable .DefaultValue .MaxLength .FixedLength .Precision .Scale .Unicode .Collation .ElementType(元素的类型)

      3.3.1.1 CollectionType(集合类型)

      3.3.1.2 ReferenceType(引用类型) .Type(引用的实体类型)

      3.3.1.3 RowType(行类型)

        3.3.1.3.1 Property(属性) .Name .Type .Nullable .DefaultValue .MaxLength .FixedLength .Precision .Scale .Unicode .Collation

      3.3.1.4 TypeRef(类型引用).Type(引用的类型) .Nullable .DefaultValue .MaxLength .FixedLength .Precision .Scale .Unicode .Collation

    3.3.2 ReferenceType

    3.3.3 RowType

4 FunctionImport (导入函数).Name .ReturnType .EntitySet(返回类型是该实体集)

  4.1 Parameter

5 ComplexType (复杂类型).Name .BaseType(基类) .Abstract(是否为抽象类型)

  5.1 Property .ConcurrencyMode(是否用于开放式并发检查) 其他类似上述Property

6 方面(细则) 适用于Property(属性),TypeRef(类型引用),Parameter(参数) CollectionType(集合类型)

7 基元类型

8 批注元素 (自定义元素)

9 Schema (根) .Namespace(命名空间) .Alias(别名) .xmlns(xml命名空间) .xmlns:cg(xml子空间)

  9.1 Using (导入命名空间) .Namespace(导入的命名空间) .Alias(别名)

  9.2 EntityContainer (实体容器).Name(名称) .Extends(包含另一实体容器的内容)

    9.2.1 EntitySet (实体集).Name(实体集名) .EntityType(实体类型)

    9.2.2 AssociationSet

    9.2.3 FunctionImport

  9.3 EntityType(实体类型) .Name(名称) .BaseType(基类) .Abstract(抽象类) .OpenType(是否为开放实体类型)

    9.3.1 Key(键)

      9.3.1.1 PropertyRef (属性引用)  .Name(所引用的属性名)

    9.3.2 Property

    9.3.3 NavigationProperty(导航属性).Name(名称) .Relationship(关联) .ToRole (终端) .FromRole(始端)

  9.4 Assocaciation

  9.5 ComplexType

  9.6 Function

二、存储层ssdl

数据定义语言:DDL

连接字符串参数:Provider 提供程序名称;Provider Connection String 连接字符串; Metadata 元数据和映射资源; Name 应用程序配置中的连接名称。

数据提供程序:EntityClient

管理连接:EntityConnection

连接字符串:EntityConnectionStringBuilder

读取命令目标树的结果:EntityDataReader(IExtendedDatarecord)

1.快速参考

1 Schema 框架

1.1 Association 关联

1.1.1 End 端

1.1.1.1 OnDelete 关联删除

1.1.2 ReferentialConstraint 外键约束

1.1.2.1 Pricipal 主体端

1.1.2.1.1 PropertyRef 属性引用

1.1.2.2 Dependent 依赖端

1.1.2.2.1 PropertyRef

1.2 EntityType 实体类

1.2.1 Key 键

1.2.1.1 PropertyRef

1.2.2 Property 属性

1.3 EntityContainer 实体容器

1.3.1 EntitySet 实体集

1.3.1.1 DefiningQuery 定义查询

1.3.2 AssociationSet 关联集

1.3.2.1 End 端

1.4 Function 函数

1.4.1 CommandText 数据库SQL段

1.4.2 Parameter 参数

 

三、映射层msl

1.快速参考

1 Mapping 映射框架的根 .Space “C-S”

  1.1 Alias 别名 .Key 别名 .Value 命名空间

  1.2 EntityContainerMapping 概念模型实体容器映射到存储模型实体容器 .CdmEntityContainer 概念模型实体容器 .StorageModelContainer 存储模型实体容器 .GenerateUpdateViews (True|False)

    1.2.1 EntitySetMapping 实体集映射 .Name 概念模型实体集 .TypeName 概念模型实体类型 .StoreEntitySet 存储模型实体集 .MakeColummnsDistinct 是否仅返回不同行

      1.2.1.1 EntityTypeMapping 实体映射 .TypeName 概念模型实体

        1.2.1.1.1 MappingFragment 实体映射到表或视图 .StoreEntitySSet 表或视图 .MakeColumnsDistinct 仅返回不同行

          1.2.1.1.1.1 ComplexTypeMapping 复杂类型映射 .TypeName 复杂类型

            1.2.1.1.1.1.1 ScalarProperty  属性映射到列表或参数 .Name 概念模型属性 .ColumnName 表列 .ParameterName 参数名 .Version (Current | Original)

            1.2.1.1.1.2 ScalarProperty

            1.2.1.1.1.3 Condition 条件 .ColumnName 表列 .Name 属性名 .IsNull 是否为null  .Value 比较值

          1.2.1.1.2 ModificationFunctionMapping 插入、更新和删除函数映射到存储过程

            1.2.1.1.2.1 DeleteFunction 删除函数 .FunctionName 存储模型中的函数 .RowsAffectedParameter 受影响函数的输出参数的名称

              1.2.1.1.2.1.1 AssociationEnd 关联属性映射 .AssociationSet 关联名 .From 关联的FromRole .To 关联的ToRole

              1.2.1.1.2.1.2 ComplexProperty 复杂属性映射 .Name 概念模型实体类型复杂属性的名称 .TypeName属性类型

              1.2.1.1.2.1.3 ScarlarProperty

            1.2.1.1.2.2 InsertFunction 插入函数

              1.2.1.1.2.2.1 AssociationEnd

              1.2.1.1.2.2.2 ComplexProperty

              1.2.1.1.2.2.3 ResultBinding 返回值映射  .Name 实体属性名 .ColumnName 表列

              1.2.1.1.2.2.3 ScarlarProperty

            1.2.1.1.2.3 UpdateFunction

              1.2.1.1.2.3.1 AssociationEnd

              1.2.1.1.2.3.2 ComplexProperty

              1.2.1.1.2.3.3 ResultBinding

              1.2.1.1.2。3.3 ScarlarProperty

          1.2.1.1.3 ScalarProperty

          1.2.1.1.4 Condition

        1.2.1.2 QueryView 只读结果视图SQL查询 .TypeName 概念模型类型名称

        1.2.1.3 MappingFragment

      1.2.2 AssociationSetMapping 关联集映射 .Name 关联集名 .TypeName 关联集类型 .StoreEntitySet 表

        1.2.2.1 QueryView

        1.2.2.2 EndProperty 关联端映射 .Name 端名

          1.2.2.2.1 ScalarProperty

        1.2.2.3 Condition

        1.2.2.4 ModificationFunctionMapping

          1.2.2.4.1 InsertFunction 和 DeleteFunction

            1.2.2.4.1 EndProperty

      1.2.3 FunctionImportMapping 函数导入映射 .FunctionImportName 概念模型中要是映射的函数导入 .FunctionName 存储模型中的函数名

        1.2.3.1 ResultMapping 返回类型映射

          1.2.3.1.1 EntityTypeMapping

          1.2.3.1.2 ComplexTypeMapping

四、LINQ to Entities

1.过程

  1. 从 ObjectContext 构造 ObjectQuery( T) 实例。
  2. 通过使用 ObjectQuery( T) 实例在 C# 中编写 LINQ to Entities 查询。
  3. 将 LINQ 标准查询运算符和表达式将转换为命令目录树。
  4. 对数据源执行命令目录树表示形式的查询。 执行过程中在数据源上引发的任何异常都将直接向上传递到客户端。
  5. 将查询结果返回到客户端。
时间: 2024-10-05 23:18:35

编程三大核心内容之一:数据处理的相关文章

编程三大核心内容之二:通信

WCF是.NET提供的具备高度灵活性的通信管理框架. 一.特点 1.灵活的服务端支持: asp.net.windows服务.com+进程.windows窗体等. 2.编程方便:不需要共同基类. 3.信道可选:http.tcp.ipc.自定义信道. 4.安全:支持wse 3.0标准. 5.扩展性:soap注入. 6.集成性:支持dcom和asp.net web服务的集成. 二.核心服务 1.SOAP 简单对象访问协议 2.WSDL Web服务描述语言 3.REST 代表性状态传输 4.JSON J

JAVA多线程之并发编程三大核心问题

概述 并发编程是Java语言的重要特性之一,它能使复杂的代码变得更简单,从而极大的简化复杂系统的开发.并发编程可以充分发挥多处理器系统的强大计算能力,随着处理器数量的持续增长,如何高效的并发变得越来越重要.但是开发难,并发更难,因为并发程序极易出现bug,这些bug是比较诡异的,跟踪难,且难以复现.如果要解决这些问题就要正确的发现这些问题,这就需要弄清并发编程的本质,以及并发编程要解决什么问题.本文主要讲解并发要解决的三大问题:原子性.可见性.有序性. 基本概念 硬件的发展 硬件的发展中,一直存

(转载)ASP.NET三大核心对象及基础功能解析

原文链接:http://tech.it168.com/a2011/1207/1284/000001284879_all.shtml 想当初在只使用WebForms框架并以服务端为中心的开发模式时,发现Asp.net好复杂.一大堆服务端控件,各有各的使用方法,有些控件的事件也很重要,必须在合适地时机去响应,还真有些复杂.后来逐渐发现这些复杂的根源其实就是服务器控件相关的抽象逻辑.随着Ajax越用越多,可能有些人也做过这些事情:[新建一个ashx文件,读取一些用户的输入数据,Form, QueryS

spring三大核心学习(一)---控制反转

记得当年大学时候,java的企业级框架还是ssh的天下(spring,struts和hibernate),但是现在,感觉spring已经完全把那两个框架甩在后边了.用spring的人越来越多,用struts的人比原来少多了,用hibernate的就更少了.毕竟现在it人才流动性太大了,招人上来上手很重要,谁知道他什么时候就跑了..(hibernate太复杂了). 我最近只看spring,所以只说spring. 记得当初面试的时候被问到过spring的三大核心思想.相信多数javaer都被问到过这

30分钟掌握ES6核心内容

ECMAScript 6(以下简称ES6)是JavaScript语言的下一代标准.因为当前版本的ES6是在2015年发布的,所以又称ECMAScript 2015. 也就是说,ES6就是ES2015. 虽然目前并不是所有浏览器都能兼容ES6全部特性,但越来越多的程序员在实际项目当中已经开始使用ES6了.所以就算你现在不打算使用ES6,但为了看懂别人的你也该懂点ES6的语法了... 在我们正式讲解ES6语法之前,我们得先了解下Babel. Babel Babel是一个广泛使用的ES6转码器,可以将

30分钟掌握ES6/ES2015核心内容

30分钟掌握ES6/ES2015核心内容 ECMAScript 6(以下简称ES6)是JavaScript语言的下一代标准.因为当前版本的ES6是在2015年发布的,所以又称ECMAScript 2015. 也就是说,ES6就是ES2015. 虽然目前并不是所有浏览器都能兼容ES6全部特性,但越来越多的程序员在实际项目当中已经开始使用ES6了.所以就算你现在不打算使用ES6,但为了看懂别人的你也该懂点ES6的语法了... 在我们正式讲解ES6语法之前,我们得先了解下Babel.Babel Bab

struts2框架的核心内容

 Struts1和Struts2的区别和对比: Action 类: • Struts1要求Action类继承一个抽象基类.Struts1的一个普遍问题是使用抽象类编程而不是接口,而struts2的Action是接口. • Struts 2 Action类可以实现一个Action接口,也可实现其他接口,使可选和定制的服务成为可能.Struts2提供一个ActionSupport基类去 实现 常用的接口.Action接口不是必须的,任何有execute标识的POJO对象都可以用作Struts2的Ac

《简明Python编程》核心笔记(1~5章)

2014年8月20日 <简明Python编程>核心笔记  (1~5章) 昨天和今天两天时间里,把<简明Python编程>这一本书学完了,包括书上的代码.现把核心笔记记录下来,以便以后复习. 第一章 简介 Python语言是少有的一种可以称得上即简单又功能强大的编程语言.你将惊喜地发现Python语言是多么地简单,它注重的是如何解决问题而不是编程语言的语法和结构. Python的特点: 简单 易懂 免费.开源 高层语言:高级语言 可移植性:可以移植在许多平台上.包括Linux.Win

不爱请放手:揭秘手游玩家三大核心痛点

不爱请放手:揭秘手游玩家三大核心痛点 2014/10/22 · Testin · 业界资讯 许多游戏厂商为了让游戏能够快速捞金,在游戏还未真正完善时就早早的把它推到玩家面前,而在游戏内测(其实就是让玩家一起寻找BUG,完善游戏)期间却犹抱琵琶半遮面,让少数玩家参与,勾着大多数玩家胃口.结果游戏公测后才发现游戏存在着严重的BUG:经常性崩溃.闪退.延迟.网络连接异常等,而且许多BUG因为技术原因无法及时处理,严重影响了游戏体验,导致玩家受尽折磨后不得不选择放弃. 手游玩家的头号痛点就是无缝体验被突