CodeFirst技术介绍

上传人:平*** 文档编号:16848683 上传时间:2017-11-09 格式:DOC 页数:16 大小:231.29KB
返回 下载 相关 举报
CodeFirst技术介绍_第1页
第1页 / 共16页
CodeFirst技术介绍_第2页
第2页 / 共16页
CodeFirst技术介绍_第3页
第3页 / 共16页
CodeFirst技术介绍_第4页
第4页 / 共16页
CodeFirst技术介绍_第5页
第5页 / 共16页
点击查看更多>>
资源描述

《CodeFirst技术介绍》由会员分享,可在线阅读,更多相关《CodeFirst技术介绍(16页珍藏版)》请在金锄头文库上搜索。

1、Code First 技术介绍1.创建应用程序简单起见,我们将构建一个使用 Code First 执行数据访问的基本控制台应用程序。 打开 Visual Studio “文件”-“新建”-“ 项目” 从左侧菜单中选择“Windows”和“ 控制台应用程序” 输入 CodeFirstNewDatabaseSample 作为名称 选择“确定”2.创建模型我们使用类来定义一个非常简单的模型。在 Program.cs 文件中进行定义,但是实际应用程序中,可能会将类分为若干个单独的文件,可能作为单独的项目。在 Program.cs 中的程序类定义下,添加以下两个类。public class Blog p

2、ublic int BlogId get; set; public string Name get; set; public virtual List Posts get; set; public class Post public int PostId get; set; public string Title get; set; public string Content get; set; public int BlogId get; set; public virtual Blog Blog get; set; 可以看到,我们将虚拟化两个导航属性(Blog.Posts 和 Post.B

3、log)。这将启用实体框架的延迟加载功能。延迟加载意味着,尝试访问这些属性的内容时,将自动从数据库加载。3.创建上下文现在,可以定义派生上下文,用于表示数据库的一个会话,以便我们查询和保存数据。我们定义一个派生自 System.Data.Entity.DbContext 的上下文,并为模型中的每个类公开一个类型化 DbSet。现在,开始使用来自实体框架的类型。因此,我们需要添加 EntityFramework NuGet 程序包。 “项目” “管理 NuGet 程序包”注意:如果没有“管理 NuGet 程序包”选项,则应安装 最新版本的 NuGet 选择“联机”选项卡 选择“EntityFra

4、mework”程序包 单击“安装”在 Program.cs 顶部,为 System.Data.Entity 添加一个 using 语句。using System.Data.Entity;在 Program.cs 中的 Post 类下,添加以下派生上下文。public class BloggingContext : DbContext public DbSet Blogs get; set; public DbSet Posts get; set; 下面是 Program.cs 现在应包含内容的完整列表。using System; using System.Collections.Generic

5、; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Data.Entity; namespace CodeFirstNewDatabaseSample class Program static void Main(string args) public class Blog public int BlogId get; set; public string Name get; set; public virtual List Posts get; set; public class

6、 Post public int PostId get; set; public string Title get; set; public string Content get; set; public int BlogId get; set; public virtual Blog Blog get; set; public class BloggingContext : DbContext public DbSet Blogs get; set; public DbSet Posts get; set; 这是我们开始存储和检索数据所需的全部代码。显然,后台发生了许多事情。稍后,我们将进行

7、了解。但是,首先让我们看看它是如何运行的。4.读写数据实现 program.cs 中的 Main 方法,如下所示。这些代码为上下文创建一个新实例,然后使用该实例插入新博客。之后,它使用 LINQ 查询检索数据库中的所有博客(按标题的字母顺序进行排序)。class Program static void Main(string args) using (var db = new BloggingContext() / Create and save a new Blog Console.Write(Enter a name for a new Blog: ); var name = Consol

8、e.ReadLine(); var blog = new Blog Name = name ; db.Blogs.Add(blog); db.SaveChanges(); / Display all Blogs from the database var query = from b in db.Blogs orderby b.Name select b; Console.WriteLine(All blogs in the database:); foreach (var item in query) Console.WriteLine(item.Name); Console.WriteLi

9、ne(Press any key to exit.); Console.ReadKey(); 现在,可以运行应用程序,对其进行测试。Enter a name for a new Blog: ADO.NET 博客All blogs in the database:ADO.NET 博客Press any key to exit.我的数据在哪里?按照约定,DbContext 已经创建了一个数据库。 如果本地 SQL Express 实例可用(默认情况下随 Visual Studio 2010 安装),则 Code First 已对该实例创建了数据库 如果 SQL Express 不可用,则 Code

10、 First 将尝试使用 LocalDb(默认情况下随 Visual Studio 2012 安装) 数据库以派生上下文的完全限定名命名,在我们的示例中,名称为CodeFirstNewDatabaseSample.BloggingContext这些仅仅是默认约定,除此之外,还有多种方式可更改 Code First 所用的数据库。有关更多信息,请参见 DbContext 如何发现模型和数据库连接 主题。可以在 Visual Studio 中使用服务器资源管理器连接至此数据库 “视图”-“服务器资源管理器” 右键单击“数据连接” 并选择“添加连接” 如果尚未从服务器资源管理器连接至数据库,则需要选

11、择 Microsoft SQL Server 作为数据源 连接至 LocalDb (localdb)v11.0) 或 SQL Express (.SQLEXPRESS),具体取决于安装情况 现在,可以检查 Code First 已经创建的架构。DbContext 通过查看我们定义的 DbSet 属性,了解模型包含哪些类。随后,它使用 Code First 约定的默认集来确定表和列的名称,确定数据类型,查找主键等。本演练稍后将介绍如何重写这些约定。5.处理模型更改现在更改模型,当我们进行更改时,还需要更新数据库架构。为此,我们使用一个称为“Code First 迁移”(或简称“迁移” )的功能。

12、“迁移” 是一组有序的步骤,描述如何升级(和降级)数据库架构。这些步骤(称为“ 迁移”)中的每个步骤均包含一些代码,用于描述要应用的更改。 第一步是为 BloggingContext 启用 Code First 迁移。 “工具”-“库程序包管理器”-“ 程序包管理器控制台 ” 在程序包管理器控制台中运行 Enable-Migrations 命令 一个新的 Migrations 文件夹已添加至项目中,它包含两个文件: Configuration.cs 此文件包含“ 迁移” 将用来迁移 BloggingContext 的设置。在本演练中不需要进行任何更改,但是,在此处可以指定种子数据、为其他数据库

13、注册提供程序、更改生成迁移的命名空间等。 _InitialCreate.cs 这是第一个迁移,它表示已经应用于数据库的更改。应用更改的目的是将其从空数据库迁移至包含博客和文章表的数据库。尽管我们让 Code First 自动创建这些表,现在我们选择“迁移” (已转化为一次“迁移” )。Code First 还在本地数据库中记录:该“迁移”已经应用。文件名中的时间戳用于排序。现在,更改模型,向 Blog 类添加一个 Url 属性:public class Blog public int BlogId get; set; public string Name get; set; public st

14、ring Url get; set; public virtual List Posts get; set; 在程序包管理器控制台中运行 Add-Migration AddUrl 命令。Add-Migration 命令检查自上次迁移后是否有更改,并使用所有更改搭建新迁移。我们可以为迁移指定名称;在本例中,将此迁移称为“AddUrl”。搭建的代码表明:我们需要向 dbo.Blogs 表添加可容纳字符串数据的 Url 列。如果需要,可以对搭建的代码进行编辑,但是,在本例中,没有这个必要。namespace CodeFirstNewDatabaseSample.Migrations using Sy

15、stem; using System.Data.Entity.Migrations; public partial class AddUrl : DbMigration public override void Up() AddColumn(dbo.Blogs, Url, c = c.String(); public override void Down() DropColumn(dbo.Blogs, Url); 在程序包管理器控制台中运行 Update-Database 命令。此命令将所有挂起的迁移应用于数据库。InitialCreate 迁移已经应用,因此,这些迁移将仅应用新的 AddUrl 迁移。提示:在调用 Update-Database 命令查看对数据库执行的 SQL 时,可以使用 Verbose 开关。新的 Url 列已添加至数据库中的 Blogs 表: 6.数据注释到目前为止,EF 发现了使用其默认约定的模型。但是,有时类不遵从约定,我们需要能够执行进一步配置。对此有两种方法;本节将介绍数据注释,下一

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号