代码改变世界

Entity Framework

2015-10-20 22:01  昏晓  阅读(247)  评论(0编辑  收藏  举报

学习一种新技术的思路:

  1. 首先,要明确这种新技术是解决什么问题的,所需要的基础知识是什么;
  2. 其次,这种技术是如何解决这个问题的,从概念上来讲,是什么结构,是如何运行的;
  3. 再次,这些概念具体的实现也就是对应的类库中有哪些类、接口等,这些类、接口对应哪些概念,具体的方法是什么,如何在自己的项目中运用。

比如说,以EF为例:

首先,EF是一种ORM,解决的问题是对象和关系之间的映射问题,为什么要在对象和关系之间进行映射呢?其实理解新技术要解决什么问题这一点最难,因为我没有遇到过这种问题,所以也很难理解这个问题,比如说,我一直在使用简单的“事务脚本”的模式,根本没有使用“领域模型”,也就没有使用“对象”,也就根本没有遇到过需要将“对象”映射为“关系“的问题,所以理解不了EF到底要解决的“对象和关系之间进行映射”是什么问题,解决这个问题的基本思路是什么;等到你使用了“领域模型”后,才发现对象和关联之间的不匹配是个大问题,非常需要这样一个ORM框架;那么ORM(也就是EF)要解决的基本问题是:

  1. 存储在关系数据库中的记录,如何方便的转换为内存中的对象;
  2. 对内存中对象的修改,如何方便的保存到数据库中;

要解决这个问题,ORM需要知道“领域模型”中的类及其属性和关系模型中的表及其字段之间是什么关系(也就是需要进行某种“配置”来表示这种关系),有了这个配置,需要某个机制能够利用这个配置,在对象和关系之间进行转换,这也意味着,这个“机制”要能够认识领域模型中的所有”类“,也要能够认识数据库中的所有表,它知道如何访问数据库,它要提供接口,供应用程序调用以便将数据库中的数据加载到内存中变成对象,将内存中的对象保存到数据库中。

这样我们就知道了ORM的基本结构,即1.需要有上面描述的那个“机制”以及这个机制需要具备的基本功能;2.需要能够对“类及其属性”和“表及其字段”之间的关系进行配置。

那么EF是怎么实现这个机制的呢?

EF用System.Data.Entity.DBContext来实现上面说的“机制”,用System.Data.Entity.Infrastructure.DbModel表示对象和关系之间的对应关系,用System.Data.Entity.DBModelBuilder来配置对象和关系之间的对应关系并生成DbModel。这几个类构成了EF的核心。

 

 

觉得有用的文章列表:

Code First:Inside DBContext Initialization.http://blog.oneunicorn.com/2011/04/15/code-first-inside-dbcontext-initialization/,这篇博客文章介绍了DBContext初始化的过程。