使用新数据库在 ASP.NET Core 上开始使用 EF Core
在本教程中,你将使用 Entity Framework Core 构建执行基本数据访问的 ASP.NET Core MVC 应用程序。 该教程使用迁移基于此数据模型创建数据库。
你可在 Windows 上使用 Visual Studio 2017,或在 Windows、macOS 或 Linux 上使用 .NET Core CLI 来学习本教程。
在 GitHub 上查看此文章的示例:
- Visual Studio 2017 with SQL Server(配有 SQL Server 的 Visual Studio 2017)
- .NET Core CLI with SQLite(配有 SQLite 的 .NET Core CLI)。
系统必备
安装以下软件:
- 具有以下工作负载的 Visual Studio 2017 15.7 版或更高版本:
- “ASP.NET 和 Web 开发”(位于“Web 和云”下)
- “.NET Core 跨平台开发”(位于“其他工具集”下)
- .NET Core 2.1 SDK.
创建新项目
- 打开 Visual Studio 2017
- “文件”>“新建”>“项目”
- 从左菜单中选择“已安装”>“Visual C#”>“.NET Core”。
- 选择“ASP.NET Core Web 应用程序”。
- 输入“EFGetStarted.AspNetCore.NewDb”作为名称,然后单击“确定”。
- 在“新建 ASP.NET Core Web 应用程序”对话框中:
- 确保在下拉列表中选择“.NET Core”和“ASP.NET Core 2.1”
- 选择“Web 应用程序(模型视图控制器)”项目模板
- 确保将“身份验证”设置为“无身份验证”
- 单击“确定”
警告:如果你使用“单独用户帐户”(而不是“无”)进行身份验证,Entity Framework Core 模型会添加到 Models\IdentityModel.cs
中的项目。 使用在本教程中学习的技巧,可以选择添加第二个模型,或者扩展此现有模型以包含实体类。
安装 Entity Framework Core
要安装 EF Core,请为要作为目标对象的 EF Core 数据库提供程序安装程序包。 有关可用提供程序的列表,请参阅数据库提供程序。
对于本教程,无需安装提供程序包,因为本教程使用 SQL Server。 SQL Server 提供程序包包含在 Microsoft.AspnetCore.App 元包中。
创建模型
定义构成模型的上下文类和实体类。
右键单击“Models”文件夹,然后选择“添加”>“类”。
输入“Model.cs”作为名称,然后单击“确定”。
将此文件的内容替换为以下代码:
C#using Microsoft.EntityFrameworkCore; using System.Collections.Generic; namespace EFGetStarted.AspNetCore.NewDb.Models { public class BloggingContext : DbContext { public BloggingContext(DbContextOptions<BloggingContext> options) : base(options) { } public DbSet<Blog> Blogs { get; set; } public DbSet<Post> Posts { get; set; } } public class Blog { public int BlogId { get; set; } public string Url { get; set; } public ICollection<Post> 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 Blog Blog { get; set; } } }
生产应用通常会将每个类放在单独的文件中。 为简单起见,本教程将这些类放在一个文件中。
使用依赖注入注册上下文
若要使 BloggingContext 可用于 MVC 控制器,请在 Startup.cs 中将其注册为服务。
在应用程序启动过程中,通过依赖关系注入 注册服务(如 BloggingContext),以便能够通过构造函数的参数和属性向使用服务的组件(如 MVC 控制器)自动提供该服务。
在 Startup.cs 中,添加以下
using
语句:C#using EFGetStarted.AspNetCore.NewDb.Models; using Microsoft.EntityFrameworkCore;
将以下突出显示的代码添加到
ConfigureServices
方法:C#public void ConfigureServices(IServiceCollection services) { services.Configure<CookiePolicyOptions>(options => { // This lambda determines whether user consent for non-essential cookies is needed for a given request. options.CheckConsentNeeded = context => true; options.MinimumSameSitePolicy = SameSiteMode.None; }); services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1); var connection = @"Server=(localdb)\mssqllocaldb;Database=EFGetStarted.AspNetCore.NewDb;Trusted_Connection=True;ConnectRetryCount=0"; services.AddDbContext<BloggingContext> (options => options.UseSqlServer(connection)); // BloggingContext requires // using EFGetStarted.AspNetCore.NewDb.Models; // UseSqlServer requires // using Microsoft.EntityFrameworkCore; }
生产应用通常会将连接字符串放在配置文件或环境变量中。 为简单起见,本教程在代码中定义它。有关详细信息,请参阅连接字符串 。
创建数据库
以下步骤使用迁移创建数据库。
“工具”>“NuGet 包管理器”>“包管理器控制台”
运行以下命令:
PowerShellAdd-Migration InitialCreate Update-Database
如果收到错误,指出
The term 'add-migration' is not recognized as the name of a cmdlet
,请关闭并重新打开 Visual Studio。Add-Migration
命令为迁移搭建基架,以便为模型创建一组初始表。Update-Database
命令创建数据库并向其应用新的迁移。
创建控制器
生成 Blog 实体控制器和视图的基架。
- 在“解决方案资源管理器”中,右键单击“控制器”文件夹,然后选择“添加”>“控制器”。
- 选择“视图使用 Entity Framework 的 MVC 控制器”,然后单击“添加”。
- 将“模型类”设置为“Blog”,将“数据上下文类”设置为“BloggingContext”。
- 单击 添加。
基架引擎创建以下文件:
- 控制器 (Controllers/BlogsController.cs)
- “创建”、“删除”、“详细信息”、“编辑”和“索引”页面的 Razor 视图 (Views/Blogs/*.cshtml)
运行此应用程序
- 调试 > 开始执行(不调试)
- 导航到 /Blogs
- 使用“新建”链接创建一些博客条目。
- 测试“详细信息”、“编辑”和“删除”链接。