学习 MVC 第 4 部分 - 使用 EntityFramework Code First 方法创建 MVC 应用程序






4.91/5 (45投票s)
使用 EntityFramework Code-First 方法的 MVC 应用程序
- 下载 PDF_Article.zip - 1.5 MB
- 下载源代码 - 2.3 MB
- 下载 LearningMVCWithEntityFrameworkPart3DataBaseFirst.zip - 2.4 MB
- 下载源代码 - 6.2 MB
引言
在我们的前三篇文章中,我们学习了很多关于 MVC 的知识,从定义到使用,从创建应用程序到使用不同的技术将 MVC 应用程序与数据库连接。
在该系列的最后一篇文章中,我们学习了如何使用 Entity Framework 将我们的 MVC 应用程序与现有数据库连接。
本文将重点介绍如何使用 CodeFirst 方法将我们的 MVC 应用程序与数据库连接,这是 Microsoft Entity Framework 提供的一项功能。
我们的路线图
只是为了提醒我们学习 MVC 的完整路线图
- 第一部分:MVC 架构和关注点分离简介。
- 第二部分:从头开始创建 MVC 应用程序并使用 LINQ to SQL 将其连接到数据库。
- 第三部分:借助 EntityFramework DB-First 方法连接 MVC 应用程序。
- 第四部分:借助 EntityFramework Code-First 方法连接 MVC 应用程序。
- 第五部分:在带有 EntityFramework 的 MVC 应用程序中实现 Repository 模式。
- 第六部分:在带有 EntityFramework 的 MVC 应用程序中实现通用 Repository 模式和 Unit Of Work 模式。
先决条件
在开始阅读本文之前,有一些先决条件
- 我们有在文章系列的第三部分中创建的运行示例应用程序。
- 我们的本地文件系统上有
EntityFramework
4.1 包或 DLL。 - 我们了解 MVC 应用程序是如何创建的。
Code-First 方法
为了实现领域驱动设计,Entity Framework 引入了 EF 4.1 Code First。在 Code First 方法中,我们首先关注领域设计或实体/POCO 类,并根据我们的模型要求创建类。我们没有应用程序的数据库,而是通过定义领域后从代码自动创建数据库。创建的数据库与我们设计的领域完美匹配,因此在设计领域模型时我们必须非常谨慎和细致。在没有打开数据库服务器的情况下,借助我们的实体和 XML 配置,动态创建数据库感觉令人兴奋。
没关系,如果您不是数据库专家,如果您是 C# 开发人员,只需专注于您的模型/类创建。EntityFramework
将为您承担创建和管理数据库的麻烦。
Procedure
步骤 1:在 Visual Studio 中打开我们在学习 MVC-Part3 中创建的 MVC 应用程序。
我们可以清楚地看到并记住我们以前如何借助实体框架将我们的 MVC 应用程序连接到数据库,是的,它是 edmx 类和从 edmx 类生成的 Model.tt
类。
步骤 2:我们不需要现有的数据库,因此您可以删除为我们的第 3 部分应用程序(如果已创建)创建的数据库。
步骤 3:我们现在不需要 edmx 文件,所以让我们清理我们的应用程序,清除所有这些类。只需删除 EFDataModel.edmx、Model1.Context.tt 和 Model1.tt 文件。现在请不要运行应用程序。它会给出编译时错误,因为我们正在使用这些类 ;-), 我们的解决方案将如下所示
我们的旧解决方案在 Models 文件夹中有一个 UserList
类,我只更改了类的名称,以区别于以前的应用程序,并且为了可读性,就像在第一部分中一样。
步骤 4:很简单,只需向您的解决方案添加一个类,并将其命名为 MVCDBContext.cs,如下图所示
步骤 5:如果尚未添加,只需将 System.Data.Entity DLL 作为引用添加到解决方案中。
步骤 6:在我们的 DBContext
类中使用命名空间 System.Data.Entity
,并从 DBContext
类继承添加的类,
DbContext
类:根据 MSDN,DbContext
类在概念上类似于 ObjectContext
。定义 ObjectContext
类是 Microsoft .NET Framework 4 中核心 EF API 的一部分,这是我们的英雄类,它允许我们使用表示我们模型(实体类)的强类型类来执行查询、更改跟踪和更新数据库。DbContext
是 ObjectContext
的一个包装器,它公开了 ObjectContext
最常用的功能,并提供了一些更简单的“快捷方式”来完成那些经常使用但直接用 ObjectContext
编码很复杂的任务。它是 ObjectContext
的简化替代方案,是使用特定模型与数据库交互的主要对象。
步骤 7:向我们创建的 DbContext
类添加一个 DBSet
属性
public DbSet<User> Users { get; set; }
尖括号中定义的 User
是我们在 Models 文件夹中创建的模型,因此我们的 MVCDBContext
类如下所示
using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Linq;
using System.Web;
using LearningMVC.Models;
namespace LearningMVC
{
public class MVCDBContext : DbContext
{
public DbSet<User> Users { get; set; }
}
}
就这样,我们 90% 的工作都完成了?
DbSet
属性:它是 ObjectSet
的简化替代方案,用于对模型中的特定类型执行 CRUD 操作。
默认情况下,DbContext
类的名称将是我们的数据库的名称,该数据库将自动创建,因此请明智地选择上下文类的名称,否则也可以在 web.config 中处理。
模型的名称将是数据库中表的名称,模型的属性将是表的列。
我们的英雄
DbContext
和 DbSet
都是我们的超级英雄,用于创建和处理数据库操作,并使我们高度抽象,为我们提供了易用性。
当我们使用 DbContext
时,我们实际上正在使用实体集。DbSet
表示一个类型化实体集,用于执行创建、读取、更新和删除操作。我们没有独立创建和使用 DbSet
对象。DbSet
只能与 DbContext
一起使用。
步骤 8:在 web.config 文件中定义一个连接字符串,您可以删除以前定义的连接字符串,新的连接字符串将大致如下所示
连接字符串的名称将是我们定义的 DbContect
的名称,即 MVCDbContext
。
步骤 9:现在,我们只需修改控制器中的访问方法,以前,当我们在第三部分创建应用程序时,我们从从 edmx 文件生成的 modelcontext
类访问上下文类。edmx 文件已添加,并引用了已创建的数据库。
但是现在情况不同了,我们现在没有数据库,我们将使用控制器中的 MVCDBContext
类访问表和列,所以只需更改旧应用程序中 Actions 中使用的以下代码行
var dbContext = new MVCEntities() ;
to
var dbContext = new MVCDBContext();
搞定。
只需按 F5,您就会看到
应用程序是如何运行的,数据库在哪里???老兄,回到你的数据库服务器,检查数据库
我们看到我们的数据库已创建,名为 MVCDB,这就是 EntityFramework
的魔力。现在我们可以使用我们的应用程序对这个数据库执行所有 CRUD 操作。只需创建一个新用户。
在数据库中我们看到,用户已创建。
默认情况下,模型中名称中带有 ID 的整数属性将是数据库中的主键,在我们的 caseUserId
中,或者您也可以在模型中定义主键。
结论
现在我们知道如何使用 EntityFramework
从我们的代码根据我们的领域模型创建数据库,我们已经进入了 MVC 和 Entity Framework 的高级概念。
当我们查看 DbContext
的定义时,它使用了存储库模式和工作单元模式的术语。我们将在我的下一篇文章中更详细地讨论这些。
编程愉快 :)