65.9K
CodeProject 正在变化。 阅读更多。
Home

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

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.91/5 (45投票s)

2013年7月29日

CPOL

6分钟阅读

viewsIcon

157420

downloadIcon

8310

使用 EntityFramework Code-First 方法的 MVC 应用程序

引言

在我们的前三篇文章中,我们学习了很多关于 MVC 的知识,从定义到使用,从创建应用程序到使用不同的技术将 MVC 应用程序与数据库连接。

在该系列的最后一篇文章中,我们学习了如何使用 Entity Framework 将我们的 MVC 应用程序与现有数据库连接。

本文将重点介绍如何使用 CodeFirst 方法将我们的 MVC 应用程序与数据库连接,这是 Microsoft Entity Framework 提供的一项功能。

我们的路线图

只是为了提醒我们学习 MVC 的完整路线图

先决条件

在开始阅读本文之前,有一些先决条件

  1. 我们有在文章系列的第三部分中创建的运行示例应用程序。
  2. 我们的本地文件系统上有 EntityFramework 4.1 包或 DLL。
  3. 我们了解 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.edmxModel1.Context.ttModel1.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 的一部分,这是我们的英雄类,它允许我们使用表示我们模型(实体类)的强类型类来执行查询、更改跟踪和更新数据库。DbContextObjectContext 的一个包装器,它公开了 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 中处理。

模型的名称将是数据库中表的名称,模型的属性将是表的列。

我们的英雄

DbContextDbSet 都是我们的超级英雄,用于创建和处理数据库操作,并使我们高度抽象,为我们提供了易用性。

当我们使用 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 的定义时,它使用了存储库模式和工作单元模式的术语。我们将在我的下一篇文章中更详细地讨论这些。

编程愉快 :)

© . All rights reserved.