MVC与数据库的CodeFirst连接方法

在前几篇文章中,学习了MVC的基础知识,包括定义、使用方式、从头开始创建应用程序以及使用不同技术将MVC应用程序与数据库连接。在本系列的最后一部分,学习了如何使用Entity Framework将MVC应用程序与现有数据库连接。本文将重点介绍如何使用CodeFirst方法将MVC应用程序与数据库连接,这是微软的Entity Framework提供的一个特性。

为了提醒完整学习路线图,以下是学习MVC的路线图:

  • 第1部分:MVC架构和关注点分离的介绍。
  • 第2部分:从头开始创建MVC应用程序,并使用LINQ to SQL将其与数据库连接。
  • 第3部分:使用EntityFramework DB-First方法将MVC应用程序与数据库连接
  • 第4部分:使用EntityFramework Code-First方法将MVC应用程序与数据库连接
  • 第5部分:在MVC应用程序中使用EntityFramework实现Repository模式。
  • 第6部分:在MVC应用程序中使用EntityFramework实现通用Repository模式和工作单元模式。

先决条件

在开始本文之前,需要满足一些先决条件:

  • 有一个正在运行的示例应用程序,在文章系列的第三部分中创建了它。
  • 本地文件系统上有EntityFramework 4.1包或DLL。
  • 理解如何创建MVC应用程序。

Code-First方法

为了实现领域驱动设计,Entity Framework引入了EF 4.1 Code First。在Code First方法中,首先关注领域设计或实体/POCO类,并根据模型需求创建类。没有应用程序的数据库,而是在定义了领域之后,从代码中自动创建数据库。创建的数据库完全符合设计的领域,因此必须非常谨慎和敏锐地设计领域模型。看到数据库在实体和XML配置的帮助下立即创建,而无需打开数据库服务器,这让人感到兴奋。

无论是否是数据库专家,如果是一个C#开发人员,只需专注于模型/类创建。EntityFramework将为创建和管理数据库。

操作步骤

步骤1:在Visual Studio中打开在“学习MVC-第3部分”中创建的MVC应用程序。可以清楚地看到并记住如何使用实体框架将MVC应用程序连接到数据库的,是的,它是edmx类和Model.tt类,这些类是从edmx类生成的。

步骤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的替代品,是使用特定模型与数据库交互的主要对象。

public class MVCDBContext : DbContext { public DbSet Users { get; set; } }

就是这样,90%的工作已经完成?DbSet属性:它是ObjectSet的简化替代品,用于对模型中的特定类型执行CRUD操作。默认情况下,DbContext类的名称将是数据库的名称,数据库将自动创建,所以选择上下文类的名称时要明智,否则也可以在web.config中处理。模型的名称将是数据库中的表名,模型的属性将是表的列。

超级英雄DbContext和DbSet在创建和处理数据库操作方面是超级英雄,使抽象化,为提供了易于使用的便利。当使用DbContext时,实际上正在使用实体集。DbSet代表用于执行创建、读取、更新和删除操作的类型化实体集。不是创建DbSet对象并独立使用它们。DbSet只能与DbContext一起使用。

步骤8:在web.config文件中定义一个连接字符串,可以删除之前定义的连接字符串,新的连接字符串看起来像:

连接字符串的名称将是定义的DbContect的名称,即MVCDbContext。

步骤9:现在,只需要修改控制器中的访问方法,以前,当在第三部分创建应用程序时,从modelcontext类访问上下文类的,该类是从edmx文件生成的。edmx文件被添加具有对已创建数据库的引用。但现在情况不同了,现在没有数据库,将使用MVCDBContext类在控制器中访问表和列,所以只需更改早期应用程序操作中使用的以下代码行:

var dbContext = new MVCEntities();

变为

var dbContext = new MVCDBContext();

工作完成。只需按F5,将看到:

应用程序如何运行,数据库在哪里?伙计,回到数据库服务器,检查数据库:

看到数据库已经创建,名称为MVCDB,这是EntityFramework的魔力。现在可以使用应用程序对数据库执行所有CRUD操作。只需创建一个新用户。

在数据库中看到,用户创建了。默认情况下,模型中名为ID的整数属性将是数据库中的主键,在例子中是UserId,或者也可以在模型中定义主键。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485