注意
此版本不是本文的最新版本。 请参阅本文的 .NET 10 版本以获取当前发布的信息。
警告
不再支持此版本的 ASP.NET Core。 有关详细信息,请参阅 .NET 和 .NET 核心支持策略。 请参阅本文的 .NET 10 版本以获取当前发布的信息。
介绍
本教程系列的这一部分重点介绍如何在 ASP.NET Core MVC 应用程序中使用 SQL 数据库。
你将学习如何:
- 为 ASP.NET Core MVC 应用注册和配置Entity Framework Core数据库上下文。
- 在本地开发中使用数据库连接字符串。
- 使用 SQL Server Express LocalDB 进行开发,并使用 SQL Server 对象资源管理器 检查数据库和数据。
- 使用初始示例数据来初始化数据库。
先决条件
本教程使用在上一步中设置的数据库:Part 4,将模型添加到 ASP.NET Core MVC 应用。
使用数据库上下文
MvcMovieContext 对象处理连接到数据库并将 Movie 对象映射到数据库记录的任务。 数据库上下文在Program.cs文件中的依赖注入容器中注册。
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddDbContext<MvcMovieContext>(options =>
options.UseSqlServer(builder.Configuration.GetConnectionString("MvcMovieContext") ?? throw new InvalidOperationException("Connection string 'MvcMovieContext' not found.")));
ASP.NET Core Configuration 系统读取 ConnectionString 键。 对于本地开发,它从 appsettings.json 文件中获取连接字符串:
"ConnectionStrings": {
"MvcMovieContext": "Server=(localdb)\\mssqllocaldb;Database=MvcMovieContext-4ebefa10-de29-4dea-b2ad-8a8dc6bcf374;Trusted_Connection=True;MultipleActiveResultSets=true"
}
警告
本文使用不需要对用户进行身份验证的本地数据库。 生产应用应使用可用的最安全的身份验证流。 有关已部署测试和生产应用的身份验证的详细信息,请参阅安全身份验证流。
SQL Server Express LocalDB(本地数据库)
LocalDB:
- 是默认情况下随Visual Studio一起安装的 SQL Server Express 数据库引擎的轻型版本。
- 使用连接字符串按需启动。
- 面向程序开发。 它在用户模式下运行,因此没有复杂的配置。
- 默认情况下,在 C:/Users/{user} 目录中创建 .mdf 文件。
检查数据库
在 View 菜单中,打开 SQL Server 对象资源管理器 (SSOX)。
右键单击 Movie 表 (dbo.Movie)“>”
> 查看设计器。
请注意 ID 旁边的密钥图标。 默认情况下,EF 将名为 ID 的属性设置为主键。
右键单击 Movie 表,然后单击“查看数据”
>
初始化数据库数据
在 Models 文件夹中创建一个名为 SeedData 的新类。 将生成的代码替换为以下代码:
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using MvcMovie.Data;
using System;
using System.Linq;
namespace MvcMovie.Models;
public static class SeedData
{
public static void Initialize(IServiceProvider serviceProvider)
{
using (var context = new MvcMovieContext(
serviceProvider.GetRequiredService<
DbContextOptions<MvcMovieContext>>()))
{
// Look for any movies.
if (context.Movie.Any())
{
return; // DB has been seeded
}
context.Movie.AddRange(
new Movie
{
Title = "When Harry Met Sally",
ReleaseDate = DateTime.Parse("1989-2-12"),
Genre = "Romantic Comedy",
Price = 7.99M
},
new Movie
{
Title = "Ghostbusters ",
ReleaseDate = DateTime.Parse("1984-3-13"),
Genre = "Comedy",
Price = 8.99M
},
new Movie
{
Title = "Ghostbusters 2",
ReleaseDate = DateTime.Parse("1986-2-23"),
Genre = "Comedy",
Price = 9.99M
},
new Movie
{
Title = "Rio Bravo",
ReleaseDate = DateTime.Parse("1959-4-15"),
Genre = "Western",
Price = 3.99M
}
);
context.SaveChanges();
}
}
}
如果数据库中有任何电影,种子初始化器将会返回,并且不会添加任何电影。
if (context.Movie.Any())
{
return; // DB has been seeded.
}
添加种子初始值设定项
将 Program.cs 的内容替换为以下代码。 新代码将突出显示。
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using MvcMovie.Data;
using MvcMovie.Models;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddDbContext<MvcMovieContext>(options =>
options.UseSqlServer(builder.Configuration.GetConnectionString("MvcMovieContext") ?? throw new InvalidOperationException("Connection string 'MvcMovieContext' not found.")));
// Add services to the container.
builder.Services.AddControllersWithViews();
var app = builder.Build();
using (var scope = app.Services.CreateScope())
{
var services = scope.ServiceProvider;
SeedData.Initialize(services);
}
// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Home/Error");
// The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseRouting();
app.UseAuthorization();
app.MapStaticAssets();
app.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}")
.WithStaticAssets();
app.Run();
测试应用。 通过调用 Program.cs 文件中的代码强制应用初始化,使种子方法能够正常运行。 若要强制初始化,请关闭Visual Studio打开的命令提示符窗口,然后按 Ctrl+F5 重新启动。
应用显示种子数据。
刷新此表 Movie 显示相同的数据。
注意
可能无法在小数字段中输入十进制逗号。 若要使 jQuery 验证支持使用逗号(“,”)作为小数点的非英语区域设置,以及支持非美国英语的日期格式,您必须采取措施使应用程序全球化。 有关添加十进制逗号的说明,请参阅此GitHub注释 4076。
介绍
本教程系列的这一部分重点介绍如何在 ASP.NET Core MVC 应用程序中使用 SQL 数据库。
你将学习如何:
- 为 ASP.NET Core MVC 应用注册和配置Entity Framework Core数据库上下文。
- 在本地开发中使用数据库连接字符串。
- 使用 SQL Server Express LocalDB 进行开发,并使用 SQL Server 对象资源管理器 检查数据库和数据。
- 使用初始示例数据来初始化数据库。
先决条件
本教程使用在上一步中设置的数据库:Part 4,将模型添加到 ASP.NET Core MVC 应用。
使用数据库上下文
MvcMovieContext 对象处理连接到数据库并将 Movie 对象映射到数据库记录的任务。 数据库上下文在Program.cs文件中的依赖注入容器中注册。
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddDbContext<MvcMovieContext>(options =>
options.UseSqlServer(builder.Configuration.GetConnectionString("MvcMovieContext") ?? throw new InvalidOperationException("Connection string 'MvcMovieContext' not found.")));
ASP.NET Core Configuration 系统读取 ConnectionString 键。 对于本地开发,它从 appsettings.json 文件中获取 连接字符串。
"ConnectionStrings": {
"MvcMovieContext": "Server=(localdb)\\mssqllocaldb;Database=MvcMovieContext-4ebefa10-de29-4dea-b2ad-8a8dc6bcf374;Trusted_Connection=True;MultipleActiveResultSets=true"
}
警告
本文使用不需要对用户进行身份验证的本地数据库。 生产应用应使用可用的最安全的身份验证流。 有关已部署测试和生产应用的身份验证的详细信息,请参阅安全身份验证流。
SQL Server Express LocalDB(本地数据库)
LocalDB:
- 是默认情况下随Visual Studio一起安装的 SQL Server Express 数据库引擎的轻型版本。
- 使用连接字符串按需启动。
- 面向程序开发。 它在用户模式下运行,因此没有复杂的配置。
- 默认情况下,在 C:/Users/{user} 目录中创建 .mdf 文件。
检查数据库
在 View 菜单中,打开 SQL Server 对象资源管理器 (SSOX)。
右键单击 Movie 表 (dbo.Movie)“>”
请注意 ID 旁边的密钥图标。 默认情况下,EF 将名为 ID 的属性设置为主键。
右键单击 Movie 表,然后单击“查看数据”
初始化数据库数据
在 Models 文件夹中创建一个名为 SeedData 的新类。 将生成的代码替换为以下代码:
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using MvcMovie.Data;
using System;
using System.Linq;
namespace MvcMovie.Models;
public static class SeedData
{
public static void Initialize(IServiceProvider serviceProvider)
{
using (var context = new MvcMovieContext(
serviceProvider.GetRequiredService<
DbContextOptions<MvcMovieContext>>()))
{
// Look for any movies.
if (context.Movie.Any())
{
return; // DB has been seeded
}
context.Movie.AddRange(
new Movie
{
Title = "When Harry Met Sally",
ReleaseDate = DateTime.Parse("1989-2-12"),
Genre = "Romantic Comedy",
Price = 7.99M
},
new Movie
{
Title = "Ghostbusters ",
ReleaseDate = DateTime.Parse("1984-3-13"),
Genre = "Comedy",
Price = 8.99M
},
new Movie
{
Title = "Ghostbusters 2",
ReleaseDate = DateTime.Parse("1986-2-23"),
Genre = "Comedy",
Price = 9.99M
},
new Movie
{
Title = "Rio Bravo",
ReleaseDate = DateTime.Parse("1959-4-15"),
Genre = "Western",
Price = 3.99M
}
);
context.SaveChanges();
}
}
}
如果数据库中有任何电影,种子初始化器将会返回,并且不会添加任何电影。
if (context.Movie.Any())
{
return; // DB has been seeded.
}
添加种子初始值设定项
将 Program.cs 的内容替换为以下代码。 新代码将突出显示。
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using MvcMovie.Data;
using MvcMovie.Models;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddDbContext<MvcMovieContext>(options =>
options.UseSqlServer(builder.Configuration.GetConnectionString("MvcMovieContext") ?? throw new InvalidOperationException("Connection string 'MvcMovieContext' not found.")));
// Add services to the container.
builder.Services.AddControllersWithViews();
var app = builder.Build();
using (var scope = app.Services.CreateScope())
{
var services = scope.ServiceProvider;
SeedData.Initialize(services);
}
// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Home/Error");
// The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseRouting();
app.UseAuthorization();
app.MapStaticAssets();
app.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
app.Run();
删除数据库中的所有记录。 可以使用浏览器中的删除链接,也可从 SSOX 执行此操作。
测试应用。 通过调用 Program.cs 文件中的代码强制应用初始化,使种子方法能够正常运行。 若要强制初始化,请关闭Visual Studio打开的命令提示符窗口,然后按 Ctrl+F5 重新启动。
应用显示种子数据。
注意
可能无法在小数字段中输入十进制逗号。 若要使 jQuery 验证支持使用逗号(“,”)作为小数点的非英语区域设置,以及支持非美国英语的日期格式,您必须采取措施使应用程序全球化。 有关添加十进制逗号的说明,请参阅此GitHub注释 4076。
介绍
本教程系列的这一部分重点介绍如何在 ASP.NET Core MVC 应用程序中使用 SQL 数据库。
你将学习如何:
- 为 ASP.NET Core MVC 应用注册和配置Entity Framework Core数据库上下文。
- 在本地开发中使用数据库连接字符串。
- 使用 SQL Server Express LocalDB 进行开发,并使用 SQL Server 对象资源管理器 检查数据库和数据。
- 使用初始示例数据来初始化数据库。
先决条件
本教程使用在上一步中设置的数据库:Part 4,将模型添加到 ASP.NET Core MVC 应用。
使用数据库上下文
MvcMovieContext 对象处理连接到数据库并将 Movie 对象映射到数据库记录的任务。 数据库上下文在Program.cs文件中的依赖注入容器中注册。
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddDbContext<MvcMovieContext>(options =>
options.UseSqlServer(builder.Configuration.GetConnectionString("MvcMovieContext")));
ASP.NET Core Configuration 系统读取 ConnectionString 键。 对于本地开发,它从 appsettings.json 文件中获取 连接字符串。
"ConnectionStrings": {
"MvcMovieContext": "Data Source=MvcMovieContext-ea7a4069-f366-4742-bd1c-3f753a804ce1.db"
}
警告
本文使用不需要对用户进行身份验证的本地数据库。 生产应用应使用可用的最安全的身份验证流。 有关已部署测试和生产应用的身份验证的详细信息,请参阅安全身份验证流。
SQL Server Express LocalDB(本地数据库)
LocalDB:
- 是默认情况下随Visual Studio一起安装的 SQL Server Express 数据库引擎的轻型版本。
- 使用连接字符串按需启动。
- 面向程序开发。 它在用户模式下运行,因此没有复杂的配置。
- 默认情况下,在 C:/Users/{user} 目录中创建 .mdf 文件。
检查数据库
在 View 菜单中,打开 SQL Server 对象资源管理器 (SSOX)。
右键单击 Movie 表 (dbo.Movie)“>”
请注意 ID 旁边的密钥图标。 默认情况下,EF 将名为 ID 的属性设置为主键。
右键单击 Movie 表,然后单击“查看数据”
初始化数据库数据
在 Models 文件夹中创建一个名为 SeedData 的新类。 将生成的代码替换为以下代码:
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using MvcMovie.Data;
using System;
using System.Linq;
namespace MvcMovie.Models;
public static class SeedData
{
public static void Initialize(IServiceProvider serviceProvider)
{
using (var context = new MvcMovieContext(
serviceProvider.GetRequiredService<
DbContextOptions<MvcMovieContext>>()))
{
// Look for any movies.
if (context.Movie.Any())
{
return; // DB has been seeded
}
context.Movie.AddRange(
new Movie
{
Title = "When Harry Met Sally",
ReleaseDate = DateTime.Parse("1989-2-12"),
Genre = "Romantic Comedy",
Price = 7.99M
},
new Movie
{
Title = "Ghostbusters ",
ReleaseDate = DateTime.Parse("1984-3-13"),
Genre = "Comedy",
Price = 8.99M
},
new Movie
{
Title = "Ghostbusters 2",
ReleaseDate = DateTime.Parse("1986-2-23"),
Genre = "Comedy",
Price = 9.99M
},
new Movie
{
Title = "Rio Bravo",
ReleaseDate = DateTime.Parse("1959-4-15"),
Genre = "Western",
Price = 3.99M
}
);
context.SaveChanges();
}
}
}
如果数据库中有电影,种子初始化器将返回,并且不会添加任何电影。
if (context.Movie.Any())
{
return; // DB has been seeded.
}
添加种子初始化器
将 Program.cs 的内容替换为以下代码。 新代码已高亮显示。
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using MvcMovie.Data;
using MvcMovie.Models;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddDbContext<MvcMovieContext>(options =>
options.UseSqlServer(builder.Configuration.GetConnectionString("MvcMovieContext")));
// Add services to the container.
builder.Services.AddControllersWithViews();
var app = builder.Build();
using (var scope = app.Services.CreateScope())
{
var services = scope.ServiceProvider;
SeedData.Initialize(services);
}
// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Home/Error");
// The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
app.Run();
删除数据库中的所有记录。 可以使用浏览器中的删除链接,也可从 SSOX 执行此操作。
测试应用。 通过调用 Program.cs 文件中的代码强制应用初始化,使种子方法能够正常运行。 若要强制初始化,请关闭Visual Studio打开的命令提示符窗口,然后按 Ctrl+F5 重新启动。
应用显示种子数据。
注意
可能无法在小数字段中输入十进制逗号。 若要使 jQuery 验证支持使用逗号(“,”)作为小数点的非英语区域设置,以及支持非美国英语的日期格式,您必须采取措施使应用程序全球化。 有关添加十进制逗号的说明,请参阅此GitHub注释 4076。
介绍
本教程系列的这一部分重点介绍如何在 ASP.NET Core MVC 应用程序中使用 SQL 数据库。
你将学习如何:
- 为 ASP.NET Core MVC 应用注册和配置Entity Framework Core数据库上下文。
- 在本地开发中使用数据库连接字符串。
- 使用 SQL Server Express LocalDB 进行开发,并使用 SQL Server 对象资源管理器 检查数据库和数据。
- 使用初始示例数据来初始化数据库。
先决条件
本教程使用在上一步中设置的数据库:Part 4,将模型添加到 ASP.NET Core MVC 应用。
使用数据库上下文
MvcMovieContext 对象处理连接到数据库并将 Movie 对象映射到数据库记录的任务。 数据库上下文在Program.cs文件中的依赖注入容器中注册。
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddDbContext<MvcMovieContext>(options =>
options.UseSqlServer(builder.Configuration.GetConnectionString("MvcMovieContext")));
ASP.NET Core Configuration 系统读取 ConnectionString 键。 对于本地开发,它从 appsettings.json 文件中获取 连接字符串。
"ConnectionStrings": {
"MvcMovieContext": "Data Source=MvcMovieContext-ea7a4069-f366-4742-bd1c-3f753a804ce1.db"
}
警告
本文使用不需要对用户进行身份验证的本地数据库。 生产应用应使用可用的最安全的身份验证流。 有关已部署测试和生产应用的身份验证的详细信息,请参阅安全身份验证流。
SQL Server Express LocalDB(本地数据库)
LocalDB:
- 是默认情况下随Visual Studio一起安装的 SQL Server Express 数据库引擎的轻型版本。
- 使用连接字符串按需启动。
- 面向程序开发。 它在用户模式下运行,因此没有复杂的配置。
- 默认情况下,在 C:/Users/{user} 目录中创建 .mdf 文件。
检查数据库
在 View 菜单中,打开 SQL Server 对象资源管理器 (SSOX)。
右键单击 Movie 表 (dbo.Movie)“>”
请注意 ID 旁边的密钥图标。 默认情况下,EF 将名为 ID 的属性设置为主键。
右键单击 Movie 表,然后单击“查看数据”
初始化数据库数据
在 Models 文件夹中创建一个名为 SeedData 的新类。 将生成的代码替换为以下代码:
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using MvcMovie.Data;
using System;
using System.Linq;
namespace MvcMovie.Models;
public static class SeedData
{
public static void Initialize(IServiceProvider serviceProvider)
{
using (var context = new MvcMovieContext(
serviceProvider.GetRequiredService<
DbContextOptions<MvcMovieContext>>()))
{
// Look for any movies.
if (context.Movie.Any())
{
return; // DB has been seeded
}
context.Movie.AddRange(
new Movie
{
Title = "When Harry Met Sally",
ReleaseDate = DateTime.Parse("1989-2-12"),
Genre = "Romantic Comedy",
Price = 7.99M
},
new Movie
{
Title = "Ghostbusters ",
ReleaseDate = DateTime.Parse("1984-3-13"),
Genre = "Comedy",
Price = 8.99M
},
new Movie
{
Title = "Ghostbusters 2",
ReleaseDate = DateTime.Parse("1986-2-23"),
Genre = "Comedy",
Price = 9.99M
},
new Movie
{
Title = "Rio Bravo",
ReleaseDate = DateTime.Parse("1959-4-15"),
Genre = "Western",
Price = 3.99M
}
);
context.SaveChanges();
}
}
}
如果数据库中有任何电影,种子初始化器将会返回,并且不会添加任何电影。
if (context.Movie.Any())
{
return; // DB has been seeded.
}
<a name=snippet_“si”>
添加种子初始值设定项
将 Program.cs 的内容替换为以下代码。 新代码将突出显示。
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using MvcMovie.Data;
using MvcMovie.Models;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddDbContext<MvcMovieContext>(options =>
options.UseSqlServer(builder.Configuration.GetConnectionString("MvcMovieContext")));
// Add services to the container.
builder.Services.AddControllersWithViews();
var app = builder.Build();
using (var scope = app.Services.CreateScope())
{
var services = scope.ServiceProvider;
SeedData.Initialize(services);
}
// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Home/Error");
// The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
app.Run();
删除数据库中的所有记录。 可以使用浏览器中的删除链接,也可从 SSOX 执行此操作。
测试应用。 通过调用 Program.cs 文件中的代码强制应用初始化,使种子方法能够正常运行。 若要强制初始化,请关闭Visual Studio打开的命令提示符窗口,然后按 Ctrl+F5 重新启动。
应用显示种子数据。
注意
可能无法在小数字段中输入十进制逗号。 若要使 jQuery 验证支持使用逗号(“,”)作为小数点的非英语区域设置,以及支持非美国英语的日期格式,您必须采取措施使应用程序全球化。 有关添加十进制逗号的说明,请参阅此GitHub注释 4076。
介绍
本教程系列的这一部分重点介绍如何在 ASP.NET Core MVC 应用程序中使用 SQL 数据库。
你将学习如何:
- 为 ASP.NET Core MVC 应用注册和配置Entity Framework Core数据库上下文。
- 在本地开发中使用数据库连接字符串。
- 使用 SQL Server Express LocalDB 进行开发,并使用 SQL Server 对象资源管理器 检查数据库和数据。
- 使用初始示例数据来初始化数据库。
先决条件
本教程使用在上一步中设置的数据库:Part 4,将模型添加到 ASP.NET Core MVC 应用。
使用数据库上下文
MvcMovieContext 对象处理连接到数据库并将 Movie 对象映射到数据库记录的任务。 数据库上下文在Program.cs文件中的依赖注入容器中注册。
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddDbContext<MvcMovieContext>(options =>
options.UseSqlServer(builder.Configuration.GetConnectionString("MvcMovieContext")));
ASP.NET Core Configuration 系统读取 ConnectionString 键。 对于本地开发,它从 appsettings.json 文件中获取 连接字符串。
"ConnectionStrings": {
"MvcMovieContext": "Server=(localdb)\\mssqllocaldb;Database=MvcMovieContext-7dc5;Trusted_Connection=True;MultipleActiveResultSets=true"
}
警告
本文使用不需要对用户进行身份验证的本地数据库。 生产应用应使用可用的最安全的身份验证流。 有关已部署测试和生产应用的身份验证的详细信息,请参阅安全身份验证流。
SQL Server Express LocalDB(本地数据库)
LocalDB:
- 是默认情况下随Visual Studio一起安装的 SQL Server Express 数据库引擎的轻型版本。
- 使用连接字符串按需启动。
- 面向程序开发。 它在用户模式下运行,因此没有复杂的配置。
- 默认情况下,在 C:/Users/{user} 目录中创建 .mdf 文件。
初始化数据库数据
在 Models 文件夹中创建一个名为 SeedData 的新类。 将生成的代码替换为以下代码:
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using MvcMovie.Data;
using System;
using System.Linq;
namespace MvcMovie.Models
{
public static class SeedData
{
public static void Initialize(IServiceProvider serviceProvider)
{
using (var context = new MvcMovieContext(
serviceProvider.GetRequiredService<
DbContextOptions<MvcMovieContext>>()))
{
// Look for any movies.
if (context.Movie.Any())
{
return; // DB has been seeded
}
context.Movie.AddRange(
new Movie
{
Title = "When Harry Met Sally",
ReleaseDate = DateTime.Parse("1989-2-12"),
Genre = "Romantic Comedy",
Price = 7.99M
},
new Movie
{
Title = "Ghostbusters ",
ReleaseDate = DateTime.Parse("1984-3-13"),
Genre = "Comedy",
Price = 8.99M
},
new Movie
{
Title = "Ghostbusters 2",
ReleaseDate = DateTime.Parse("1986-2-23"),
Genre = "Comedy",
Price = 9.99M
},
new Movie
{
Title = "Rio Bravo",
ReleaseDate = DateTime.Parse("1959-4-15"),
Genre = "Western",
Price = 3.99M
}
);
context.SaveChanges();
}
}
}
}
如果数据库中有任何电影,种子初始化器将会返回,并且不会添加任何电影。
if (context.Movie.Any())
{
return; // DB has been seeded.
}
添加种子初始值设定项
将 Program.cs 的内容替换为以下代码。 新代码将突出显示。
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using MvcMovie.Data;
using MvcMovie.Models;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddDbContext<MvcMovieContext>(options =>
options.UseSqlServer(builder.Configuration.GetConnectionString("MvcMovieContext")));
// Add services to the container.
builder.Services.AddControllersWithViews();
var app = builder.Build();
using (var scope = app.Services.CreateScope())
{
var services = scope.ServiceProvider;
SeedData.Initialize(services);
}
// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Home/Error");
// The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
app.Run();
删除数据库中的所有记录。 可以使用浏览器中的删除链接,也可从 SSOX 执行此操作。
测试应用。 通过调用 Program.cs 文件中的代码强制应用初始化,使种子方法能够正常运行。 若要强制初始化,请关闭Visual Studio打开的命令提示符窗口,然后按 Ctrl+F5 重新启动。
应用显示种子数据。
注意
可能无法在小数字段中输入十进制逗号。 若要使 jQuery 验证支持使用逗号(“,”)作为小数点的非英语区域设置,以及支持非美国英语的日期格式,您必须采取措施使应用程序全球化。 有关添加十进制逗号的说明,请参阅此GitHub注释 4076。
介绍
本教程系列的这一部分重点介绍如何在 ASP.NET Core MVC 应用程序中使用 SQL 数据库。
你将学习如何:
- 为 ASP.NET Core MVC 应用注册和配置Entity Framework Core数据库上下文。
- 在本地开发中使用数据库连接字符串。
- 使用 SQL Server Express LocalDB 进行开发,并使用 SQL Server 对象资源管理器 检查数据库和数据。
- 使用初始示例数据来初始化数据库。
先决条件
本教程使用在上一步中设置的数据库:Part 4,将模型添加到 ASP.NET Core MVC 应用。
使用数据库上下文
MvcMovieContext 对象处理连接到数据库并将 Movie 对象映射到数据库记录的任务。 在 Startup.cs 文件中的 ConfigureServices 方法里,将数据库上下文注册到 Dependency Injection 容器。
public void ConfigureServices(IServiceCollection services)
{
services.AddControllersWithViews();
services.AddDbContext<MvcMovieContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("MvcMovieContext")));
}
ASP.NET Core Configuration 系统读取 ConnectionString 键。 对于本地开发,它从 appsettings.json 文件中获取 连接字符串。
"ConnectionStrings": {
"MvcMovieContext": "Server=(localdb)\\mssqllocaldb;Database=MvcMovieContext-2;Trusted_Connection=True;MultipleActiveResultSets=true"
}
警告
本文使用不需要对用户进行身份验证的本地数据库。 生产应用应使用可用的最安全的身份验证流。 有关已部署测试和生产应用的身份验证的详细信息,请参阅安全身份验证流。
SQL Server Express LocalDB(本地数据库)
LocalDB:
- 是默认情况下随Visual Studio一起安装的 SQL Server Express 数据库引擎的轻型版本。
- 使用连接字符串按需启动。
- 面向程序开发。 它在用户模式下运行,因此没有复杂的配置。
- 默认情况下,在 C:/Users/{user} 目录中创建 .mdf 文件。
检查数据库
在 View 菜单中,打开 SQL Server 对象资源管理器 (SSOX)。
右键单击 Movie 表,然后单击“视图设计器”
在“电影表”上点击右键 > 查看设计器
请注意 ID 旁边的密钥图标。 默认情况下,EF 将名为 ID 的属性设置为主键。
右键单击 Movie 表,然后单击“查看数据”
在“Movie”表上右键单击 查看数据
初始化数据库数据
在 Models 文件夹中创建一个名为 SeedData 的新类。 将生成的代码替换为以下代码:
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using MvcMovie.Data;
using System;
using System.Linq;
namespace MvcMovie.Models
{
public static class SeedData
{
public static void Initialize(IServiceProvider serviceProvider)
{
using (var context = new MvcMovieContext(
serviceProvider.GetRequiredService<
DbContextOptions<MvcMovieContext>>()))
{
// Look for any movies.
if (context.Movie.Any())
{
return; // DB has been seeded
}
context.Movie.AddRange(
new Movie
{
Title = "When Harry Met Sally",
ReleaseDate = DateTime.Parse("1989-2-12"),
Genre = "Romantic Comedy",
Price = 7.99M
},
new Movie
{
Title = "Ghostbusters ",
ReleaseDate = DateTime.Parse("1984-3-13"),
Genre = "Comedy",
Price = 8.99M
},
new Movie
{
Title = "Ghostbusters 2",
ReleaseDate = DateTime.Parse("1986-2-23"),
Genre = "Comedy",
Price = 9.99M
},
new Movie
{
Title = "Rio Bravo",
ReleaseDate = DateTime.Parse("1959-4-15"),
Genre = "Western",
Price = 3.99M
}
);
context.SaveChanges();
}
}
}
}
如果数据库中有任何电影,种子初始化器将会返回,并且不会添加任何电影。
if (context.Movie.Any())
{
return; // DB has been seeded.
}
添加种子初始值设定项
将 Program.cs 的内容替换为以下代码:
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using MvcMovie.Data;
using MvcMovie.Models;
using System;
namespace MvcMovie
{
public class Program
{
public static void Main(string[] args)
{
var host = CreateHostBuilder(args).Build();
using (var scope = host.Services.CreateScope())
{
var services = scope.ServiceProvider;
try
{
SeedData.Initialize(services);
}
catch (Exception ex)
{
var logger = services.GetRequiredService<ILogger<Program>>();
logger.LogError(ex, "An error occurred seeding the DB.");
}
}
host.Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
}
}
测试应用。
删除数据库中的所有记录。 可以使用浏览器中的删除链接,也可从 SSOX 执行此操作。
通过调用 Startup 类中的方法强制应用初始化,使种子方法能够正常运行。 若要强制进行初始化,必须先停止 IIS Express,然后再重新启动它。 可以使用以下任一方法来执行此操作:
右键单击通知区域中的 IIS Express 系统任务栏图标,然后点击“退出”或“停止站点” :
- 如果是在非调试模式下运行 VS 的,请按 F5 以在调试模式下运行
- 如果是在调试模式下运行 VS 的,请停止调试程序并按 F5
应用显示种子数据。
注意
可能无法在小数字段中输入十进制逗号。 若要使 jQuery 验证支持使用逗号(“,”)作为小数点的非英语区域设置,以及支持非美国英语的日期格式,您必须采取措施使应用程序全球化。 有关添加十进制逗号的说明,请参阅此GitHub注释 4076。