教程:通过 MVC 5 开始使用 EF Database First

使用 MVC、Entity Framework 和 ASP.NET 基架,可以创建一个 Web 应用程序来提供现有数据库的接口。 本系列教程介绍如何自动生成代码,使用户能够显示、编辑、创建和删除驻留在数据库表中的数据。 生成的代码对应于数据库表中的列。 本系列的最后一部分介绍了如何将数据注释添加到数据模型以指定验证要求和显示格式。 完成后,可以继续学习 Azure 文章,了解如何将 .NET 应用和 SQL 数据库部署到Azure 应用服务。

本教程介绍如何从现有数据库开始,并快速创建允许用户与数据交互的 Web 应用程序。 它使用 Entity Framework 6 和 MVC 5 生成 Web 应用程序。 ASP.NET 基架功能使你能够自动生成用于显示、更新、创建和删除数据的代码。 使用 Visual Studio 中的发布工具,可以轻松地将站点和数据库部署到 Azure。

本系列的这一部分重点介绍如何创建数据库并用数据填充数据库。

本系列是用汤姆·戴克斯特拉和里克·安德森的撰稿撰写的。 它根据用户对评论部分中的反馈进行了改进。

在本教程中,你将了解:

  • 设置数据库

先决条件

Visual Studio 2017

设置数据库

若要模拟现有数据库的环境,首先创建一个包含一些预先填充数据的数据库,然后创建连接到数据库的 Web 应用程序。

本教程是使用 LocalDB 和 Visual Studio 2017 开发的。 可以使用现有的数据库服务器而不是 LocalDB,但根据 Visual Studio 的版本和数据库类型,可能不支持 Visual Studio 中的所有数据工具。 如果这些工具不适用于数据库,则可能需要在数据库的管理套件中执行一些特定于数据库的步骤。

如果 Visual Studio 版本中的数据库工具出现问题,请确保已安装最新版本的数据库工具。 有关更新或安装数据库工具的信息,请参阅 Microsoft SQL Server Data Tools

启动 Visual Studio 并创建SQL Server数据库项目。 将项目命名为 ContosoUniversityData

创建数据库项目

现在,你有一个空的数据库项目。 若要确保可以将此数据库部署到 Azure,请将 Azure SQL Database 设置为项目的目标平台。 设置目标平台实际上不会部署数据库;它仅表示数据库项目将验证数据库设计是否与目标平台兼容。 若要设置目标平台,请打开项目的“属性”,然后选择目标平台的“Microsoft Azure SQL 数据库”。

可以通过添加定义表的 SQL 脚本来创建本教程所需的表。 右键单击项目并添加新项。 选择“ 表和视图>表” 并将其命名为 “学生”。

在表文件中,将 T-SQL 命令替换为以下代码以创建表。

CREATE TABLE [dbo].[Student] (
    [StudentID]      INT           IDENTITY (1, 1) NOT NULL,
    [LastName]       NVARCHAR (50) NULL,
    [FirstName]      NVARCHAR (50) NULL,
    [EnrollmentDate] DATETIME      NULL,
    PRIMARY KEY CLUSTERED ([StudentID] ASC)
)

请注意,设计窗口会自动与代码同步。 可以使用代码或设计器。

显示代码和设计

添加另一个表。 这次将其命名为 Course,并使用以下 T-SQL 命令。

CREATE TABLE [dbo].[Course] (
    [CourseID] INT           IDENTITY (1, 1) NOT NULL,
    [Title]    NVARCHAR (50) NULL,
    [Credits]  INT           NULL,
    PRIMARY KEY CLUSTERED ([CourseID] ASC)
)

再重复一次,创建名为 Enrollment 的表。

CREATE TABLE [dbo].[Enrollment] (
    [EnrollmentID] INT IDENTITY (1, 1) NOT NULL,
    [Grade]        DECIMAL(3, 2) NULL,
    [CourseID]     INT NOT NULL,
    [StudentID]    INT NOT NULL,
    PRIMARY KEY CLUSTERED ([EnrollmentID] ASC),
    CONSTRAINT [FK_dbo.Enrollment_dbo.Course_CourseID] FOREIGN KEY ([CourseID]) 
        REFERENCES [dbo].[Course] ([CourseID]) ON DELETE CASCADE,
    CONSTRAINT [FK_dbo.Enrollment_dbo.Student_StudentID] FOREIGN KEY ([StudentID]) 
        REFERENCES [dbo].[Student] ([StudentID]) ON DELETE CASCADE
)

可以通过部署数据库后运行的脚本使用数据填充数据库。 将部署后脚本添加到项目。 右键单击项目并添加新项。 选择“ 用户脚本>部署后脚本”。 可以使用默认名称。

将以下 T-SQL 代码添加到部署后脚本。 此脚本只是在找不到匹配记录时将数据添加到数据库。 它不会覆盖或删除可能已输入到数据库中的任何数据。

MERGE INTO Course AS Target 
USING (VALUES 
        (1, 'Economics', 3), 
        (2, 'Literature', 3), 
        (3, 'Chemistry', 4)
) 
AS Source (CourseID, Title, Credits) 
ON Target.CourseID = Source.CourseID 
WHEN NOT MATCHED BY TARGET THEN 
INSERT (Title, Credits) 
VALUES (Title, Credits);

MERGE INTO Student AS Target
USING (VALUES 
        (1, 'Tibbetts', 'Donnie', '2013-09-01'), 
        (2, 'Guzman', 'Liza', '2012-01-13'), 
(3, 'Catlett', 'Phil', '2011-09-03')
)
AS Source (StudentID, LastName, FirstName, EnrollmentDate)
ON Target.StudentID = Source.StudentID
WHEN NOT MATCHED BY TARGET THEN
INSERT (LastName, FirstName, EnrollmentDate)
VALUES (LastName, FirstName, EnrollmentDate);

MERGE INTO Enrollment AS Target
USING (VALUES 
(1, 2.00, 1, 1),
(2, 3.50, 1, 2),
(3, 4.00, 2, 3),
(4, 1.80, 2, 1),
(5, 3.20, 3, 1),
(6, 4.00, 3, 2)
)
AS Source (EnrollmentID, Grade, CourseID, StudentID)
ON Target.EnrollmentID = Source.EnrollmentID
WHEN NOT MATCHED BY TARGET THEN
INSERT (Grade, CourseID, StudentID)
VALUES (Grade, CourseID, StudentID);

请务必注意,每次部署数据库项目时都会运行部署后脚本。 因此,在编写此脚本时,需要仔细考虑你的要求。 在某些情况下,你可能希望在每次部署项目时从一组已知的数据开始。 在其他情况下,你可能不希望以任何方式更改现有数据。 根据你的要求,你可以决定是需要部署后脚本,还是需要包含在脚本中的内容。 有关使用部署后脚本填充数据库的详细信息,请参阅在 SQL Server 数据库项目中包括数据

现在有 4 个 SQL 脚本文件,但没有实际表。 已准备好将数据库项目部署到 localdb。 在 Visual Studio 中,单击“开始”按钮 (或 F5) 生成和部署数据库项目。 检查“ 输出 ”选项卡,验证生成和部署是否成功。

若要查看新数据库是否已创建,请打开SQL Server 对象资源管理器并在正确的本地数据库服务器 (中查找项目的名称,在本例中 ( localdb) \ProjectsV13) 。

若要查看表是否填充了数据,请右键单击某个表,然后选择“ 查看数据”。

显示表数据

将显示表数据的可编辑视图。 例如,如果选择“ >dbo.course>查看数据”,则会看到一个表,其中包含三列 (课程标题学分) 和四行。

其他资源

有关 Code First 开发的介绍性示例,请参阅使用 ASP.NET MVC 5 入门。 有关更高级的示例,请参阅 为 ASP.NET MVC 4 应用创建实体框架数据模型

有关选择要使用的实体框架方法的指导,请参阅 实体框架开发方法

后续步骤

在本教程中,你将了解:

  • 设置数据库

请继续学习下一教程,了解如何创建 Web 应用程序和数据模型。