.NET Core - MVC 应用中使用数据库
MvcMovieContext
对象处理连接到数据库并将 Movie 对象映射到数据库记录的任务。
向 文件中的依赖关系注入容器数据库上下文:
例:
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddDbContext<MvcMovieContext>(options =>
options.UseSqlServer(builder.Configuration.GetConnectionString("MvcMovieContext") ?? throw new InvalidOperationException("Connection string 'MvcMovieContext' not found.")));
.NET Core配置系统会读取键。
进行本地开发时,它从appsettings.json文件获取连接字符串
例:
"ConnectionStrings": {
"MvcMovieContext": "Server=(localdb)\\mssqllocaldb;Database=MvcMovieContext-7dc5b790-765f-4381-988c-5167405bb107;Trusted_Connection=True;MultipleActiveResultSets=true"
}
1. SQL Server Express LocalDB
LocalDB:
-
- 是 SQL Server Express 数据库引擎的一个轻量级版本,默认与 Visual Studio 一起安装。
- 使用连接字符串按需启动。
- 面向程序开发。 它在用户模式下运行,因此没有复杂的配置。
- 默认情况下,在 C:/Users/{user} 目录中创建 .mdf 文件。
2. 设定数据库种子
在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.
}
3. 添加种子初始值设定项
将 Program.cs新增代码:
using MvcMovie.Models;
var app = builder.Build(); 后加:
using (var scope = app.Services.CreateScope())
{
var services = scope.ServiceProvider;
SeedData.Initialize(services);
}
删除数据库中的所有记录。
测试应用。 通过调用 Program.cs
文件中的代码强制应用初始化,使种子方法能够正常运行。
若要强制初始化,请关闭 Visual Studio 打开的命令提示符窗口,然后按 Ctrl + F5 重新启动。
应用将显示设定为种子的数据。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!