拼吾爱程序人生.Net编程ADO.Net ADO.NET Entity Framework(2)建模

1  /  1  页   1 跳转 查看:795

ADO.NET Entity Framework(2)建模

ADO.NET Entity Framework(2)建模

模型结构
[概念模型]中要有[实体键], [实体键]要与表中的 [主键] 对应,也就是说表必须要有主键.

表中的[唯一键]不会在[概念模型]中体现

在[概念模型]中默认是不允许修改[实体键]的值的

联合主健可以正常映射

如果为属性赋值超过字段长度保存时,会向数据库提交,数据库会返回错误

联合主健的主外关系可以正常映射

只有基于主健的主外关系可以在模型向导中自动建立

Conceptual Model
概念模型

用于描述实体(Entity)类型及其关系
Storage Model
存储模型

用于描述数据库实际存储架构
Mapping Specification
映射规范

将概念模型和存储模型连接起来,以便进行操作转换
Entity Class
实体类

用于描述实体的属性,每一个实体类都会定义一个属性或多个属性为一个键属性(Key Properties),用于唯一标识一个实体

实体类型可以通过继承关系加以扩展
Entity Set
实体集

实体(Entity)存在于实体集(Entity Set)中,就像表格中的行存在于表格中的一样
Entity Containe
实体容器,
实体集定义在实体容器(Entity Container)中
关联
关联

定义了实体之间的关系,可以直接通过关联,来访问相关联的对象,关联分为一对一、一对多、多对多

关联通过Association Type来定义,过实体类中的Navigation属性就可以访问与实体相关联的实体




模型关系说明

 附件: 您所在的用户组无法下载或查看附件





模型设计器结构说明


 附件: 您所在的用户组无法下载或查看附件


 附件: 您所在的用户组无法下载或查看附件

 附件: 您所在的用户组无法下载或查看附件




EDM
EF 没有采取 LINQ to SQL 基于Attribute映射的做法。
为了适应变化和提供更多的数据库类型扩展,EF 提供了专门的定义语言来完成模型设置
Conceptual schema definition language (.csdl)
 
Store schema definition language (.ssdl)
 
Mapping specification language (.msl)
 


默认,Model设计器将(.csdl)(.ssdl)(.msl)存放在一个名为(.edmx)的XML 格式定义文件,并会根据设计自动生成对应的Context与实体类

Model设计器
数据库中的表

 附件: 您所在的用户组无法下载或查看附件
模型

 附件: 您所在的用户组无法下载或查看附件
模型生成选项

 附件: 您所在的用户组无法下载或查看附件





(文/foundation  出处/博客园)

 感谢原创者的辛勤劳动,希望对您有所帮助,转载请注明原出处。
 您可能对 [ADO.Net] 的这些文章也感兴趣:

在ADO.NET数据集中浏览多个相关表(3)
C# Server Enumerator
微软发布Astoria项目的十二月份CTP版
用VisualC#访问DB2数据库
获取数据库中的所有表
实战VisualC#数据库编程
ADO.NET基础教程(一)
ADO.NET入门(1)
ADO.NET Data Service
Enumerate SQL Server Instances in C#, Using ODBC
 

回复:ADO.NET Entity Framework(2)建模

edmx文件

Code


存储模型

Code


概念模型

Code


映射

Code


图形设计器的配置部份

Code


Context

Code


实体类

Code


使用

Code


 

回复: ADO.NET Entity Framework(2)建模

使用向导创建模型

 附件: 您所在的用户组无法下载或查看附件

 附件: 您所在的用户组无法下载或查看附件

 附件: 您所在的用户组无法下载或查看附件

 附件: 您所在的用户组无法下载或查看附件


 附件: 您所在的用户组无法下载或查看附件



映射基本规则
1.[概念模型]的[数据类型],[键],[非空]约束要与[存储模型]对应

 附件: 您所在的用户组无法下载或查看附件


2.[概念模型]的属性名与[存储模型]的字段名不必一致

 附件: 您所在的用户组无法下载或查看附件

3.[存储模型]的字段如果有[键],[非空]约束, [概念模型]必需要有对应的属性与之映射

 附件: 您所在的用户组无法下载或查看附件

4. [概念模型]中出现的属性,在[存储模型]中必须要有对应的字段映射

 附件: 您所在的用户组无法下载或查看附件
5. [存储模型]的多个字段可以映射到[概念模型]的同一个属性上
加载时, [概念模型]的属性加载[存储模型]的第一个字段值
保存时, [概念模型]的属性会保存到[存储模型]的多个字段上

 附件: 您所在的用户组无法下载或查看附件
映射条件
  • 一个字段,如果要作为映射条件,就不能映射到属性上

  • 加载数据时,只会加载符合条件的数据
  • 添加数据时, 映射条件字段不可见, 射条件字段的字直接使用设计时的设定值

 附件: 您所在的用户组无法下载或查看附件


 附件: 您所在的用户组无法下载或查看附件
 

回复: ADO.NET Entity Framework(2)建模

继承
  • 要实现继承,要使用映射条件进行筛选
2. [概念模型]与 [子概念模型] 所有的筛选条件不能有相的
3. [子概念模型] 自动得到 [概念模型] 的属性
4. [子概念模型] 中可以没有属性
5. 所的[子概念模型] 的筛选条件将以[Or]的方式影响[概念模型]的筛选,也就是说[概念模型]的记录将包括[子概念模型] 记录
6. [概念模型]与 [子概念模型] 共用同一个 [实体集], [实体集]的数据类型为 ObjectQuery<概念模型>
7. 可以使用类型转换的方式从[实体集]得[子概念模型]的数据

myContext context = new myContext();
ObjectQuery<myTab> a = context.myTabSets;
ObjectQuery<myTabEx1> b = context.myTabSets.OfType<myTabEx1>();
ObjectQuery<myTabEx2> c = context.myTabSets.OfType<myTabEx2>();





 附件: 您所在的用户组无法下载或查看附件

多表联合
1. 不要求在数据库中有关系,最好是主键对主键
2. 使用对联的方式,只筛选出有对应键的记录
3. 插入时,会在两个表中同时插入键相同的记录
4. 删除时,会同时在两个表中删除键相同的记录

 附件: 您所在的用户组无法下载或查看附件

 附件: 您所在的用户组无法下载或查看附件

关联
[(1)—(*)] 关联
1. [(1)—(*)]为主外关系,主键表为(1),外键表为(*)
2. 外键字段不能出现在[概念模型]中
3. 可以在向导中直接跟据数据库中的关系直接生成,也可以在设计[概念模型]时任意添加
4. 关联要绑定到外键表上
5. 要删除主键时,要保证内存中没有对应的外键数据
6. 插入外键数据,可以插入到主键的外键集合,也可创建带主键信息的外键对象后直接插入到Context中
表 

 附件: 您所在的用户组无法下载或查看附件
设置 

 附件: 您所在的用户组无法下载或查看附件


 附件: 您所在的用户组无法下载或查看附件


 附件: 您所在的用户组无法下载或查看附件


 附件: 您所在的用户组无法下载或查看附件


 附件: 您所在的用户组无法下载或查看附件
操作数据 

 附件: 您所在的用户组无法下载或查看附件
 

回复:ADO.NET Entity Framework(2)建模

从主键表访问数据

Code


lzm ,456

3 ,5 ,6

4 ,7 ,8

wxd ,123

1 ,1 ,2

2 ,3 ,4

从外键表访问数据

Code


1 ,1 ,2

wxd ,123

2 ,3 ,4

wxd ,123

3 ,5 ,6

lzm ,456

4 ,7 ,8

lzm ,456

删除主键

Code


直接插入外键数据

Code


通过主键插入外键数据

Code


[(1)—(1)]关联
1. [(1)—(1)]为主主关系,既两个表的主键关联

2. 两个表的地位是平等的

3. 主键字段不能删除

4. 可以在向导中直接跟据数据库中的关系直接生成,也可以在设计[概念模型]时任意添加

5. 关联可绑定到任意一个表上

6. 删除时,要先将关联数据删除

7. 插入时,要有与之关联的数据



 附件: 您所在的用户组无法下载或查看附件



设置

 附件: 您所在的用户组无法下载或查看附件
 

回复:ADO.NET Entity Framework(2)建模

操作数据

 附件: 您所在的用户组无法下载或查看附件

读取

Code


lzm ,456

lzm ,mmmm ,nnnn

wxd ,123

wxd ,nnn ,nnn

Code


lzm ,mmmm ,nnnn

lzm ,456

wxd ,nnn ,nnn

wxd ,123

删除

Code


插入

Code


[(1)—(0..1)]关联
设计与[(1)—(0..1)]相同.



1. 插入(1)时,可以不插入(0..1)

2. 删除(0..1) 时,可以不删除(1)

3. 插入(0..1)时,需要插入(1)

4. 删除(1) 时, 需要删除(0..1)









[(*)—(*)]关联


 附件: 您所在的用户组无法下载或查看附件





显示中转方式

 附件: 您所在的用户组无法下载或查看附件



隐示中转方式
1. 要实现这个关联,要将关联绑定到 [中转表(安排表)]上

2. 所用的[中转表(安排表)]不能以[概念模型]的方式出现

3. 两个表的地位是平等的

4. 添加一端的(*)时,不受另一端(*)约束

5. 可以在添加一端的(*)时,通过[关联集合]将数据也添加到[关联表]与[中转表]中

6. 如果加载关联数据,[中转表]中的关联数据也会被删除.

如果不加载关联数据,将不会删除[中转表]中的关联数据


 附件: 您所在的用户组无法下载或查看附件
 

回复:ADO.NET Entity Framework(2)建模

操作数据

 附件: 您所在的用户组无法下载或查看附件

得到数据

Code


丙 ,1

a ,11

b ,22

c ,33

甲 ,2

a ,11

乙 ,3

a ,11

b ,22

Code


a ,11

丙 ,1

甲 ,2

乙 ,3

b ,22

丙 ,1

乙 ,3

c ,33

丙 ,1

删除数据

Code


添加数据

Code


同时添加数据到

[源表],

[关联表],

[中转表]

Code


 

回复:ADO.NET Entity Framework(2)建模

映射存储过程与函数

返回表型存储过程
存储过程
查询

PRSelectDBItem

Code


使用向导生成映射


 附件: 您所在的用户组无法下载或查看附件


 附件: 您所在的用户组无法下载或查看附件


 附件: 您所在的用户组无法下载或查看附件


 附件: 您所在的用户组无法下载或查看附件

Code


代码实现

Code


 

回复:ADO.NET Entity Framework(2)建模

代码实现

Code


命令型存储过程
存储过程
插入

PRinsertDBItem

Code


使用向导生成映射


 附件: 您所在的用户组无法下载或查看附件


 附件: 您所在的用户组无法下载或查看附件




代码实现

Code


参数返回值型存储过程
存储过程


算加法

PRadd

Code


使用向导生成映射


 附件: 您所在的用户组无法下载或查看附件


 附件: 您所在的用户组无法下载或查看附件




代码实现

Code


 
1  /  1  页   1 跳转