使用Entity. Framework编程(2)
使用Entity. Framework编程(2) 第二章:Code First概览
如果你使用第一、二版的EF框架工作过,你会回想起书中的业务案例:Break Away Geek Adventures, 简称BAGA。BAGA共享了很多像我们这样的奇客的冒险旅行。但是几年过去了,业务又在增长,到了需要更新应用程序的时候了。既然BAGA为软件奇客服务,他们不能拒绝尝试使用新技术,如EF的Code First.
在这一章里,我们从一个小例子来开始学习Code First的默认行为,然后逐步向这个例子里添加影响这种行为的信息。
我们将开始于BAGA业务域的一个小片断:包括我们旅行的目的地和我们的奇客们在这次旅行的住所。
Code First的美妙在于域类的定义代码与EF数据模型所依赖的代码是一样的。我们只需要开始于代码就可以了,例2-1,分别展示了Destination类和Loadging类。在开始的案例中,我们要保持类的简洁;这些类包含了一些自动属性,并没有什么逻辑。
Example 2-1. The domain model
public class Destination
{
}
public class Lodging
{
} public int LodgingId { get; set; } public string Name { get; set; } public string Owner { get; set; } public bool IsResort { get; set; } public Destination Destination { get; set; } public int DestinationId { get; set; } public string Name { get; set; } public string Country { get; set; } public string Description { get; set; } public byte[] Photo { get; set; } public List<Lodging> Lodgings { get; set; }
Destination类描述了一个特定的BAGA旅行的目的地,对于任何给定的目的地,从Aspen到Zimbabwe,BAGA都会安排各种住所,从床位到五星级酒店,以便到时暂住。因此目的地对象要包含一个或多个居所,使用了List<lodging>来表达;
EF域类介绍
本质上,这些类与EF和Code First无关。这里只简单描述了域的一部分。
为了让EF框架能够找到这些类,需要使用EF框架的context来服务、管理和持久化数据至数据库。EF框架有两种context工具可供选择,一个是ObjectContext,这一工具从EF第一次发布就一直是EF框架的一部分,而随着EF4.1的发布,伴随Code First推出轻量级的
DbContext。两种工具都可选用,但更通用(推荐)的是使用新的DbContext,也就是我们马上就要使用的。本书第7章,你将会学习如何使用ObjectContex进行Code First.
我们的BreakAwayContext类,就继承自DbContext,可以获得DbContext的所有功能。除此以外,还需要返回Destination类和Lodging类的可查询数据集DbSets,以暴露类中的属性
Example 2-2 The BreakAwayContext class
public class BreakAwayContext : DbContext
{
public DbSet<Destination> Destinations { get; set; }
public DbSet<Lodging> Lodgings { get; set; }
}
这个小小的类就代表了你在应用程序中使用的完整的数据层.感谢DbContext,你可查询,修改,跟踪和保存目的地和住所数据.下面创建一个控制台程序使用这个数据层来做一些工作,你会看到我们并非言过其实.
将片断放入程序中
为了查看有关行为,下面将带您实现一个小的VS解决方案,在此你可将这些类放进去,然后创建一个简单的控制台程序来测试你的新数据层.确保你已经开始了正确的路径,本示例将把应用程序的各个层组织在不同的项目中.
1.在VS中创建一个新的解决方案;
2.添加一个类库项目到解决方案,命名为Model.
3.在这个项目里,添加一个新的类命名为Destination.
4.修改Destination类以使其与例2-3一致:
Example 2-3. The Destination class
using System.Collections.Generic;
namespace Model
{
public class Destination
{
public int DestinationId { get; set; } public string Name { get; set; } public string Country { get; set; } public string Description { get; set; } public byte[] Photo { get; set; } public List<Lodging> Lodgings { get; set; }
}
}
5.添加另一个类,命名为Lodging,使其与例2-4一致.
Example2-4.The Lodging class
namespace Model
{
public class Lodging
{
public int LodgingId { get; set; } public string Name { get; set; } public string Owner { get; set; } public bool IsResort { get; set; } public Destination Destination { get; set; }
}
}
这就是Model项目的内容.现在,转到数据层,因为域类尚未连接到EF框架上,我们数据层将完全依赖于EF框架.
小贴士:将NuGet安装到VS中就可以将类库方便地添加到项目中.在第1章您已学到EF可以通过NuGet获取.为了完成如下步骤,你需要为VS安装NuGet扩展.为了安装NuGet,选择工具
--扩展管理….会出现扩展管理对话框,然后查找NuGet.选择NuGet扩展管理包,点击下载按钮,按照提示安装.
一旦安装完成,您就可以以一种新的方式使用VS了.你可通过VS的工具菜单--添加类库来添加所需的类库,另一种方式是使用上下文菜单来添加,方法是在解决方案的指定项目上点击右键.在下面的操作步骤中,我们使用后者
1.添加另一个类库项目,命名为DataAcess;
2.在项目资源管理器中右键单击新建立的项目选择"Add Livray Package Reference"
3.在弹出的对话框中,选择Online,并搜索Entity Framework;
4.在EF安装包上点击安装按钮,这将把Code First的运行时组件(EntityFramework.dll)添加到你的项目中;
5.右键单击新的项目并选择添加引用;
6.选择项目选项卡将Model proect加入.这将会使context能够访问刚刚在Model Project上创建的域类;
7.添加一个新类,BreakAwayContext到项目中;
8.配置这个新类如代码2-5;
Example 2-5. The BreakAwayContext class
using System.Data.Entity;
using Model;
namespace DataAccess
{
public class BreakAwayContext : DbContext
{
public DbSet<Destination> Destinations { get; set; } public DbSet<Lodging> Lodgings { get; set; }
}
}
注意类顶部的using语句.一个是System.Data.Entity命名空间.这个命名空间使得你可以访问DbContext和DbSet类;这可能有些令人困惑,命名空间为EntityFramework.dll的程序集是 EntityFramework.dll,而不是System.Data.Entity.dll。System.Data.Entity.dll包含了EF框架的核心,已经是.Net框架的一部分.
现在你的数据访问层已经建好了.可以测试你的数据访问层了.
请等一下,我们还没有告诉数据访问层数据库在哪.还没有连接字符串,没有配置文件,没有关联的数据库.我们要在此利用Code First的第一个功能,数据库初始化.Code First有一系列的步骤来找到数据库并且初始化它.我们现在先使用默认行为,在后面第6章,将会学到更多关于数据库初始化的知识。当然,也可以开始于一个现存的数据库,只是我们现在不这么做。
1.添加一个新的控制台应用程序项目到解决方案,命名为BreakAwayConsole.
相关推荐:
- [初中教育]婚姻家庭法学教学教案
- [初中教育]浅谈小学语文教学中的创新教育
- [初中教育]中华人民共和国侵权责任法2009
- [初中教育]2016-2022年中国薄膜太阳能电池行业发
- [初中教育]多级轻型井点降水的应用
- [初中教育]外语教学法流派介绍和简评
- [初中教育]实验一、典型环节及其阶跃响应
- [初中教育]内蒙古2012-2013学年度国家奖学金获奖
- [初中教育]移动通信营销渠道管理探讨
- [初中教育]初三化学第一学期第一第二章基础知识点
- [初中教育]一天的食物教学设计
- [初中教育]光导照明系统的基本结构及工作原理
- [初中教育]长春市十一高、东北师范大学附属中学、
- [初中教育]“十三五”规划重点-配重式装卸车项目
- [初中教育]领导方法和领导艺术
- [初中教育]第三章 植物病虫草鼠害诊断与防治基
- [初中教育]2019届九年级语文上册 第二单元 6纪念
- [初中教育]甲级单位编制水豆腐项目可行性报告(立
- [初中教育]Ch8-1补充 09101数据库系统原理及应用-
- [初中教育]2017-2023年中国吊装设备行业市场分析
- 制作毕业纪念册需要哪些材料
- 2015-2016学年高二化学苏教版选修4课件
- 哈佛管理导师-创建商业案例
- 职场交际中的谈吐礼仪知识与职场会议接
- 中国糕点及面包行业发展现状与竞争战略
- 沂河“12·7”洪水茶山拦河坝
- 管道水流量计算公式
- 4-2发电机火灾事故处置方案
- 数字信号处理实验五
- 2009年经济师(中级)金融专业知识全真试
- 历史街区保护规划--04历史文化遗产保护
- 宁夏回族自治区中小学职称评价标准
- 评先评优测评表
- 圆的切线证明及线段长求解在在中考中的
- 【解析版】2015年江苏省南京外国语学校
- 人教版八年级上册科学第一章习题精华
- 责任心与执行力
- SA8000社会责任管理体系标准培训
- IgA肾病的饮食应注意
- 杭州市建设工程文件归档整理方案(试行)