博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Entity Framework4.0 (四) EF4的内部结构和几个基本概念
阅读量:5099 次
发布时间:2019-06-13

本文共 5155 字,大约阅读时间需要 17 分钟。

前面,大致概述了三种使用EF4构造应用的方法:1.Database First方法。2.Model First 方法。3.Code First 方法。因为是概述,所以没深入也没拓宽。

这次我就按自己的理解去试着揭一揭,EF4的面纱。呵呵,讲述EF4的内部结构。

1. Entity Designer(实体设计器)

Designer提供一个直观的方式,使我们可以创建、修改实体,创建、修改关联,及实体和关联与数据库之间的映射方式。基本上都是鼠标点击、拖拽操作,只有大家多动手,多实践,才能更快更好地使用该设计器。最终在自己的项目中熟练、准确地使用它。

2. ObjectContext(对象上下文):管理与数据库的连接,跟踪、管理对象的状态变化、多线程同步/异步,对象信息同步等。负责把数据库中数据字段映射成内存中对象,并管理这些对象。

3. Entity (实体)和Entity Set(实体集):数据表中的每一行数据,在内存中表现为一个实体(对象)。数据表中的多行数据(如筛选结果为多行),在内存中表现为实体(对象)集合。

4. Scalar Property(标量属性)、Complex Property(复杂属性)、Navigation Property(导航属性):原子属性既是标量属性(如“姓氏”是一个标量属性,“名字”也是一个标量属性)。由多个标量属性组合成的属性叫复杂属性(如“姓氏”和“名字”组合起来成为一个复杂属性“姓名”。)在设计实体时,我们可以用复杂属性去把几个标量属性组合起来,当作一个属性使用;而当我们把这个复杂属性映射到数据库中数据列时,会把复杂属性拆开成多个标量属性。把拆成的每一个标量属性映射成一列。复杂属性作为一个整体,只会在概念层出现,在存储层没有复杂属性。因为它已经被拆成多个标量属性了。

5. Relationship 和Association:Relationship 翻译过来是“关系”(一对一,一对多,多对多共三种,表示“某一端的重数”),是一个抽象的概念,用于表示实体与实体的一种对应情况。和数据库中表与表的“关系”是一样的:Association翻译过来是“关联”或“联系”,反映到界面上就是指设计图中的一条线。表示的是一个实体可以导航到另一个实体,并不表示“重数”。只有把它们二者结合起来,才能既表示“导航”又表示“重数”。

6. *.edmx文件的结构

 在项目中的*.edmx文件上右键-》Open with... -> Xml 编辑器。点击“确定”,观察*.Edmx文件是一个Xml文件。

   该Xml文件内,首先看 <edmx:Runtime></edmx:Runtime>节点。<edmx:Runtime>节点内有三个子节点: 

  •    <edmx:StorageModels> <edmx:StorageModels>   节点是SSDL(Storage Schema Definition Language)。主要是对物理存储层上的数据库、数据表、字段的描述。内部有包含实体和关联的子节点。
  •    <edmx:ConceptualModels>     <edmx:ConceptualModels> 节点是  CSDL (Conceptual Schema Definition Language) 。主要是概念层,实体类,实体类集合,实体属性的描述。开发人员直接使用概念层定义的实体类和属性。内部有包含数据表和关联的子节点。
  •    <edmx:Mappings>  <edmx:Mappings>   节点是  C-S mapping (Conceptual-Storage-Mapping)。主要是将CSDL中定义的实体和关联映射到SSDL中的数据表和关联。

下面是EFDemo中的*.edmx的xml的形式。

Northwind.edmx
1 
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161

7. EDM生成的类:当我们使用EDM向导时(不论是Model First还是Database First),设计器会利用EntityModelCodeGenerator这个工具去生成一个文件*.edmx.cs。该文件中产生相应的类及属性。

  • 容器类:默认情况下会以App.Config连接字符串名字生成一个容器类,如(NorthwindEntities)。容器类从ObjectContext继承而来。容器类含有可以返回任何一个实体的集合的属性,如Products属性将返回一个 ObjectSet<Product>集合。
  • 实体类:每一个数据表会生成一个实体类(如Product)。实体类从EntityObject继承而来。每一个实体类都有一个工厂方法,如CreateProduct(Int32 productID, String productName, Boolean discontinued),参数是在数据库中该表的非空字段所对应的属性。
  • 容器类和实体类都是Partial 类。这样你可以在不同的地方(*cs文件中)定义同一个类,在编译时不同文件中的定义部分是合并到一起,编译成一个整体类的。使用过WPF的朋友,应该对这partial 不陌生。使用partial的好处之一是在项目开发的任何一阶段可以方便地对已有类进行灵活扩展。

 

转载于:https://www.cnblogs.com/marksun/archive/2011/12/18/2291930.html

你可能感兴趣的文章
Java语言概述
查看>>
关于BOM知识的整理
查看>>
使用word发布博客
查看>>
面向对象的小demo
查看>>
微服务之初了解(一)
查看>>
GDOI DAY1游记
查看>>
收集WebDriver的执行命令和参数信息
查看>>
数据结构与算法(三)-线性表之静态链表
查看>>
mac下的mysql报错:ERROR 1045(28000)和ERROR 2002 (HY000)的解决办法
查看>>
Hmailserver搭建邮件服务器
查看>>
django之多表查询-2
查看>>
快速幂
查看>>
改善C#公共程序类库质量的10种方法
查看>>
AIO 开始不定时的抛异常: java.io.IOException: 指定的网络名不再可用
查看>>
MyBaits动态sql语句
查看>>
HDU4405(期望DP)
查看>>
拉格朗日乘子法 那些年学过的高数
查看>>
vs code 的便捷使用
查看>>
Spring MVC @ResponseBody返回中文字符串乱码问题
查看>>
用户空间与内核空间,进程上下文与中断上下文[总结]
查看>>