[翻译] - <Entity Framework> - 快速入门: 用 EMD 工具在已有数据库的基础上创建一个模型
纯属学习上的记录, 非专业翻译, 如有错误欢迎指正!
原文地址: http://msdn.microsoft.com/en-us/library/gg696166(v=vs.103).aspx
这个快速入门教程将展示怎么时候用 EF 和实体数据模型工具.
其中可以分为以下几部分:
用 DbContext Generator 模板生成对象层代码.
先决条件:
Microsoft Visual Studio 2010 或更新版本.
最新发布的 EF 版本. (可以通过 NuGet中的'Entity Framework' 包获得)
欲了解更多信息, 请参考 Entity Framework Releases and Versioning.
1. 打开 Visual Studio 2010 或更新版本.
2. 在 文件 菜单中, 选择 新建, 然后点击 项目.
3. 在左边的窗格中, 点击 Visual C#, 然后选择 类库 模板.
4. 输入 SchoolModel 作为项目名称, 并输入 DatabaseFirstSample 作为解决方案名称. 注: 要为项目名称和解决方法名称指定不同的名称, 必须选上位于 新建项目 窗口右下角的 为解决方案创建目录 选项.
如果你没有 School 数据库, 请先参考 School Database Schema 教程.
接下来, 你将使用实体模型向导来生成一个 .edmx 文件. 在这个文件中, 将会有: 一个概念模型, 一个存储模型和相关的映射信息. 这个文件为 School 概念模型和数据库定义了一组 1:1 的 实体-表 映射集.
1. 通过以下步骤添加一个新的 ADO.NET 实体数据模型 项:
a. 右键点击项目名称, 选择 添加, 然后点击 新建项 选项.
b. 在 已安装的模板 窗格中选择 数据, 然后选择 ADO.NET 实体数据模型 模板.
c. 在名称中输入 SchoolModel.edmx.
这时实体数据模型向导会出现.
2. 在 选择模型内容 对话框中, 选择 从数据库生成, 然后点击 下一步.
3. 选择 新建连接. 在 连接属性 对话框中, 在 服务器名称 文本框中输入服务器名 (例如: (localdb)\v11.0). 选择验证方法, 在数据库名文本框中输入 School, 然后点击 确定. 此时 选择您的数据连接 对话框已经根据你的数据库连接设定更新了. 确保 将 App.Config 中的实体连接设置另存为 选项被选中. 然后点击 下一步.
4. 在 选择数据库对象 对话框中, 通过选择 表 选项选中所有表.
5. 选中 确定所生成对象名称的单复数形式 和 在模型中加入外键列 选项.
该向导将执行下列操作:
- 添加对 System.Data.Entity, System.Runtime.Serialization, 和 System.Security 程序集的引用.
- 生成一个 SchoolModel.edmx 文件, 该文件定义了概念模型, 存储模型, 和他们之间的映射. 将 .edmx 文件的 生成操作 属性设置为 嵌入到输出程序集中, 故生成的元数据文件将被嵌入到程序集中.
- 创建一个包括连接字符串的 App.Config 文件. 对象层的代码将实体类型和上下文(由 System.Data.Entity.DbContext 或 System.Data.ObjectContext 引入)定义为公共语言运行库(CLR)中的类型. 在下一步中, 你将用 DbContext Generator 模板代替默认生成对对象层代码.
6. 编译项目.
EF 工具生成概念模型时, 同时也会生成对象层代码. 默认的, 生成的对象层代码包括以下内容: 继承了 EntityObject 的可多次识别(persistence aware)的实体类型的定义, 和一个继承了 ObjectContext 的上下文类型, 其中包括对应每个模型的类别的 ObjectSet<TEntity> 类型的属性.
在这一节中, 你将使用以下内容代替默认生成的代码: 持久未知的(persistence ignorant)实体类型, 也叫 POCO("plain-old" CLR objects), 和一个继承自 DbContext, 且包含了 DbSet<TEntity> 类型的属性的上下文类型. DbContext 和 DbSet<TEntity> 包含了 ObjectContext 和 ObjectSet<TEntity> 类型, 和一个可以执行大多数常见任务的简化 API. 从 EF 4.1 开始, 我们推荐你使用 DbContext API.
1. 在实体设计器中打开 .edmx 文件.
2. 在实体设计器的空白区域右击, 然后选择 添加代码生成项.
在 添加新项 对话框中, 选择 联机模板, 然后在 搜索联机模板 文本框中输入 DbContext Generator.
为你的模板选择适当的版本 (如果你想使用 EF 5.0 Beta 1 的话则选择 5.0).
将模板名称改为 SchoolModel, 然后点确定.
向导将执行以下操作:
禁用 .edmx 文件中默认的代码生成器, 并将它的 复制到输出目录 属性设置为 不复制.
创建 SchoolModel.Context.tt 和 SchoolModel.tt 项目文件. 在 SchoolModel.Context.tt 文件下, 有一个定义了继续了 DbContext 的上下文类型的文件. 而在 SchoolModel.tt 文件下, 会有一系列定义了 POCO 实体模型的文件.
如果你创建的是 Visual Basic 项目, 你可能需要在解决方案资源管理器中选中 显示所有文件 才能看到项目中的所有文件.
3. 通过 NuGet 包管理器添加对 EntityFramework 程序集的引用.
在 项目资源管理器 中, 右击 引用 文件夹, 选择 Manage NuGet Packages... 在 Manage NuGet Packages 对话框中, 选择 EntityFramework 包然后点击 Install.
注: 如果使用的是预发行版本, 你必须通过 Package Manager Console 操作. 通过以下步骤可以打开该窗口: 在 Visual Studio 的菜单栏中, 选择 工具(Tools) -> Library Package Manager -> Package Manager Console. 在命令窗口中输入以下代码: Install-Package EntityFramework –IncludePreRelease.
这将会添加最新的 EntityFramework.dll 到你的项目中.
在这一节中, 你将会创建一个控制台应用程序来查询和更新 School 模型的实体, 并将数据保存到数据库中.
创建控制台应用项目
1. 添加一个新的控制台应用程序到 DatabaseFirstSample 解决方案中. 用默认名称就行.
2. 通过 NuGet 包管理器添加对 EntityFramework 程序集的引用.
3. 添加对 SchoolModel 类库项目的引用. 在 解决方案资源管理器 中, 右击 引用 文件夹, 选择 添加引用, 在 项目 选项卡中选中 ShoolModel 项目.
4. 将 SchoolModel 项目中的 App.config 文件复制到这个项目中. .config 文件应该添加到包含可执行程序集的项目中. 现在你可以删除 SchoolModel 项目中的 App.config 文件了.
5. 将该项目设为启动项目. 通过右击项目然后选择 设为启动项目 可以到达效果.
检索并持久话数据
1. 用以下代码代替默认生成的 Program 类定义代码:
1 using SchoolModel; 2 using System.Data.Entity; 3 class Program 4 { 5 static void Main(string[] args) 6 { 7 using (var context = new SchoolEntities()) 8 { 9 var department = (from d in context.Departments 10 where d.Name == "English" 11 select d).FirstOrDefault(); 12 13 Console.WriteLine("Courses:"); 14 foreach (var c in department.Courses) 15 { 16 Console.WriteLine(" " + c.Title); 17 } 18 19 department.Courses.Add(new Course { Title = "Grammar", Credits = 3}); 20 21 // Save new entities. 22 int recordsAffected = context.SaveChanges(); 23 Console.WriteLine( 24 "Saved {0} entities to the database.", 25 recordsAffected); 26 } 27 } 28 }
2. 编译并运行应用程序.