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

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

前面,大致概述了三种使用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

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/tonykan/archive/2012/11/22/2781848.html

你可能感兴趣的文章
第二阶段:2.商业需求文档MRD:1.M版本管理
查看>>
我爱Java系列---【单列集合和双列集合总结】
查看>>
新开始
查看>>
git - 如何从项目中删除git跟踪
查看>>
MacBook Air密码忘了,苹果电脑密码忘了怎么办
查看>>
PHP二维数组排序
查看>>
.Net Core WebApi返回的json数据,自定义日期格式
查看>>
C语言运算符表
查看>>
网络调试 adb connect
查看>>
ormlite 文档
查看>>
修改root远程ssh登录权限
查看>>
保存cookies
查看>>
iOS酷炫动画效果合集
查看>>
[CSS] Scale on Hover with Transition
查看>>
状压DP(挑战程序设计竞赛)
查看>>
POJ 2386
查看>>
腾讯云“动态加速”与“CDN”的区别——浅谈对“动态加速”的理解(可能有误)...
查看>>
Spring源码学习笔记(5)
查看>>
Objective-C 日记⑧ 对象初始化
查看>>
mybatis中#{}与${}的区别
查看>>