没有合适的资源?快使用搜索试试~ 我知道了~
Code First 使用Entity Framework编程

温馨提示


试读
64页
EF,实体框架的核心是实体数据模型。实体框架在查询数据库,或根据数据创建对象,然后把修改持久化回数据库时,都会使用这个概念模型。
资源推荐
资源详情
资源评论

















第一章:欢迎来到 Code First
译者注:为方便起见,不再直译
微软的 实体框架( ),泛称 ,把外部(
,译成“外部”不一定对,我是这样理解的: 可能意指 框架,合起来的意
思就可能是“外部”了 — 译者 !" 注)的对象关系映射(#$)引到了 和 %&
'。实体框架的核心是实体数据模型,这是应用程序域向数据库架构进行映射的一个
概念模型。这个概念模型描述了应用程序中的核心类。实体框架在查询数据库,或根据数
据创建对象,然后把修改持久化回数据库时,都会使用这个概念模型。(译者注:此段全
文引用 (!" 园友的译文,确实有深度,佩服!)
在编写代码前构建 EF 模型
在使用)* 和 %&'+((, 构建的第一代 中,给予了开发者通过将现存
数据库转化为 -$. 文件的形式来创建概念模型的能力。这种 -$. 文件使用 $- 扩展名,
可以使用设计器来查看和定制模型以便更好地适应程序域。%&'+(!(
/ 带来了 的新版本:称之为 //。/ 还引入了一
种称为 $& 的功能,通过此功能可以先创建概念模型然后根据此模型再创建数据
库。
$&允许开发者在没有传统的数据库时就可以开始一个新的项目,这是 框架带
来的好处。开发者可以通过设计概念模型而首先关注应用程序域,从而让数据库的创建工
作水到渠成。
无论是通过 0 还是通过 &0 设计 $-,下一步都是为了创建您的
域以便让自动代码生成器基于实体以及找到的各种关系来创建类。通过这种方式,开发人
员拥有强类型的类来指向域对象,无论它们是客户,棒球卡,还是童话人物,都可以围绕
着这些类来愉快地开发软件应用。
另一个关键的变化在 /。在)*,实体框架只能够管理处于内存中的对象。这些对
象的类都继承自实体框架的 1" 对象。1" 对象向实体框架通知变更,
并由实体框架跟踪这些变化并最终持久化到数据库中。/ 中不仅仍有这些功能,还推
出了 2(2&&.#1",简单传统 .# 对象),支持实体框架跟踪简单类
的变化而不需要 1" 的参与,这使开发者可以自由使用自己的类,从而独立于
实体框架。 在运行时可以通过监视对象在内存中的行为保持对这些类的响应和跟踪。
Code First 的发起
基于前面介绍的有关 / 的片断,我们可以看到,微软已经提供了多途径的建模方式,其
中有一种新的方式是在 发布之初,开发人员就所期待的。这种新型的建模方法就是所
谓的 0首先让您定义域模型,而不是使用基于 -$. 的 文件。
即使采用 $& 或 来生成代码,开发者也必需使用设计器或类生
成器来辅助工作。而使用 您可以直接通过使用 2 类来定义域模型,而无
需依赖于 框架。 可以通过构建的类模型推断出大量信息。你也可以提供额

外的配置,进一步描述有关模型的信息或者是覆写 推断的信息。这种配置也
是用代码来定义的,不需要 -$. 文件或设计器。
使用设计器工作的 / 也支持 2 技术。 开发团队提供了一种 2 模板来生成
2 类(可以使用 3 下载这种 / 模板译者注)。这些生成的类可以随着设计器
的更改而自动更新。也可以使用你自己创建的 2 类。但如果你决定这样做,就需要负
责保持您的类与 $- 文件的同步。这意味着任何变更都必须在两个位置进行。
的一个最大好处就是让你的类变成了模型。这意味着改变模型就只需要在一处(你自
已的 2 类)中作出更改即可。
44和 $& 都只是一种建立可用于 框架中以进行数
据访问的实体数据模型的方式。一旦模型构建, 框架在运行时的表现是相同的,与如何
构建模型无关。选择从设计器开始还从代码开始完全取决于您的选择。图 !! 列出了不同
的可选项。
微软将 4$&4 分别形成了可选的工作流程。这是因为
每种选项都是一系列步骤,无论这些步骤是手工实施还是自动进行。例如,使用
工作流,你需要将数据库转化为工程,然后让代码生成器创建类。而
工作流则开始于类的代码构建,然后用代码生成所用的数据库。
在.NET 发行版本中间获取 Code First
在/ 发布时尚未准备好。微软不想将其在* 发布时才带给开发者,就
在 +(!! 年 / 月推出了5特别5版,称为 /!版本号随后在更新时顺延。+(!! 年 !( 月,
/+ 推出 ,替代了 /!,作为包含 0 的最新版本。核心
26,'&&,仍然是 的一部分,没有与
/!,/+ 紧密连接。/+ 还包含了另一个重要的功能,称之为
26 是这个 26 的核心,除此之外还包含其他支持类。 是一个轻
量级的 1" 这是一个包装过的 1" 4只暴露了那些微软认为大
多数开发人员最常用的 功能。 也支持通过代码模式访问由 1"

所提供的复杂功能。 提供了大量的通用任务,可以使开发者用较少的代码完成
这些任务,这在使用 时尤其明显。由于微软推荐使用 来进行
操作,您会看到本书将贯穿始终介绍此方法。但是,另一本书,叫做
2778 ,将深入探讨 ,',验
证 26 以及 带来的其他特征。
图 !+ 帮助你查看如何通过构建 /26 核心添加 和 功能。
灵活的发布日程
微软将继续通过 %' 提供的 3 工具发布基于 /+ 框架的新功能。 的核心库将会
随着 的新版本的发布而内置在其中。但是诸如 和 等核心功能
会在 的 3 包中不断得到更新。
先输入代码。。。
是个好听的名字:先写代码,然后继续。让我们先看看一些基本的默认功能,
不要管各种你可能会遇到的场景(后续的内容我们会专注于此)。
我们并不期望你重建本章的代码案例。这些案例只是作一概览,并不会深入。在第 + 章,
你将会逐步深入。你将会跟随我们在 %' 中的操作进行,然后尝试你想实现的功能。
当然,首先需要一些代码,以便足以描述业务域。本案例是关于一个宠物医院收治患畜的
业务模型。
9&!!"&
7':
7'&&"3":
9"921"
;
"&2
;
9&"2
;

%<.=%>:
?
9&"6;7::?
9&"7;7::?
9&"@;7::?
9&"&9&9;7::?
9&"%;7::?
9&".=%>%;7::?
?
"&%
;
9&"6;7::?
9&";7::?
9&"'7#%;7::?
9&"'7";7::?
9&""&A7;7::?
9&"26;7::?
?
"&&9
;
9&"6;7::?
9&"79;7::?
?
?
的核心是约定,这些默认的规则使我们可以用我们自己的类来创建模型。
框架要求一个类必须有一个键属性。规则约定如果一个属性名为 6 或者是类名B6 的形式
(如 26),这一属性就被自动配置为键。如果无法找到满足这一规则的属性,将
会在运行时抛出一个异常告诉你没有找到 C其他约定包括确定字符串的默认长度,或者
默认表结构,以及当类相互继承时如何在数据库内建表等等。

如果 完全依赖于这些规则去创建自己的类,我们需要做的工作是很有限的。但
是 并不强制你按此要求设计类,这些规则的设计是为了 能够自动
处理一些通用的场景。如果你的类遵从这些规则, 不会需要更多信息。 框
架会以你的类直接工作。如果不遵从这些规则,你就必须通过 的一些配置选项
来提供一些附加信息以确保你的类能够被 所理解。
6 代码 !! 的三个类,6 属性均符合键属性的规则要求。使用这三个类按 工作
不需要增加任何配置。
使用 DbContext 管理对象
前述的域与 框架无关。 很美好,你直接就使用你自己的类。如果你从其他
项目中现存的域类开始将获得特别的好处。
使用 4您应该定义一个继承自 的类。此类的其中一个角色,应被指
作为 " ,以便让 知道有关类需要用于创建模型。这就是 框架能够感
知类以及如何保持跟踪这些类的原因。这需要引入另一个新类:'。正如
是一个简单包装的 1" 4' 是一个包装过的 / 的
1"' 对象,同样简化了正常使用 1"' 的编码任务量。
例 !+ 展示了这种 " 类的基本样式。注意到其中有一个用于 2和 % 的
' 属性。' 允许你使用类型查询。如果我们不希望直接查询 &9,
就不需要一个 &9 的 '足够聪明知道 2 使用
&9 类,会包含在模型内。
9&!+% "&"D
7':
9"921"
;
"&% 8
;
9&"'=2>2;7::?
9&"'=%>%;7::?
?
?
使用数据层和域类
现在你可能会有一些惊讶:这些可以满足数据层的需要了吗?假如你 !((E按照
的约定就是这样。
剩余63页未读,继续阅读
资源评论

- Riygpw2014-09-16学习EF CODE FIRST,值得参考

wwejie
- 粉丝: 2
- 资源: 13
上传资源 快速赚钱
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


安全验证
文档复制为VIP权益,开通VIP直接复制
