目录
1.安装依赖包
从工具
菜单中选择NuGet包管理器
–程序包管理器控制台 (PMC)
。
//EF Core 工具(如已安装可忽略)
Install-Package Microsoft.EntityFrameworkCore.Tools
//会安装以下工具
Add-Migration
Bundle-Migration
Drop-Database
Get-DbContext
Get-Migration
Optimize-DbContext
Remove-Migration
Scaffold-DbContext
Script-Migration
Update-Database
//SQL Server驱动包
Install-Package Microsoft.EntityFrameworkCore.SqlServer
//检测和诊断 EF Core 迁移错误
Install-Package Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore
2.新建实体模型
右键单击Models
文件夹-添加
–类
-名称单数Student.cs
。
3.创建数据库上下文
在项目文件夹中,创建名为 Data
文件夹,在 Data
文件夹中,创建 SchoolContext.cs
类。
表名默认和 DbSet
属性名相同,通常采用复数形式。 例如,使用 Students
,而不使用 Student
。
using ContosoUniversity.Models;
using Microsoft.EntityFrameworkCore;
namespace ContosoUniversity.Data
{
public class SchoolContext : DbContext
{
public SchoolContext(DbContextOptions<SchoolContext> options) : base(options)
{
}
public DbSet<Course> Courses { get; set; }
public DbSet<Enrollment> Enrollments { get; set; }
public DbSet<Student> Students { get; set; }
}
}
4.数据库连接字符串
在 appsettings.json
文件中读取数据库连接字符串。
"ConnectionStrings": {
"SchoolContext": "Server=(localdb)\\mssqllocaldb;Database=SchoolContext-568d112b-dfd0-4be1-b34b-0f56e9b2a475;Trusted_Connection=True;MultipleActiveResultSets=true"
}
5.注册服务
builder.Services.AddDbContext<SchoolContext>(options =>
options.UseSqlServer(builder.Configuration.GetConnectionString("SchoolContext")));
//添加数据库异常筛选器
builder.Services.AddDatabaseDeveloperPageExceptionFilter();
6.设定数据库种子
在 Program.cs
中添加种子初始值设定项
代码。
using ContosoUniversity.Models;
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();
}
右键单击Data
文件夹或Models
文件夹-添加
–类
-名称SeedData.cs
。SeedData
静态类名和Initialize
静态方法名可以是任意的名称。
如果数据库中有任何学生,则不会添加任何学生并返回到种子初始值设定项
继续往下执行。
using ContosoUniversity.Data;
using Microsoft.EntityFrameworkCore;
namespace ContosoUniversity.Models
{
public static class SeedData
{
public static void Initialize(IServiceProvider serviceProvider)
{
using (var context = new SchoolContext(
serviceProvider.GetRequiredService<
DbContextOptions<SchoolContext>>()))
{
// Look for any students.
if (context.Students.Any())
{
return; // DB has been seeded
}
var students = new Student[]
{
new Student{FirstMidName="Carson",LastName="Alexander",EnrollmentDate=DateTime.Parse("2005-09-01")},
new Student{FirstMidName="Meredith",LastName="Alonso",EnrollmentDate=DateTime.Parse("2002-09-01")},
new Student{FirstMidName="Arturo",LastName="Anand",EnrollmentDate=DateTime.Parse("2003-09-01")},
new Student{FirstMidName="Gytis",LastName="Barzdukas",EnrollmentDate=DateTime.Parse("2002-09-01")},
new Student{FirstMidName="Yan",LastName="Li",EnrollmentDate=DateTime.Parse("2002-09-01")},
new Student{FirstMidName="Peggy",LastName="Justice",EnrollmentDate=DateTime.Parse("2001-09-01")},
new Student{FirstMidName="Laura",LastName="Norman",EnrollmentDate=DateTime.Parse("2003-09-01")},
new Student{FirstMidName="Nino",LastName="Olivetto",EnrollmentDate=DateTime.Parse("2005-09-01")}
};
foreach (Student s in students)
{
context.Students.Add(s);
}
context.SaveChanges();
var courses = new Course[]
{
new Course{CourseID=1050,Title="Chemistry",Credits=3},
new Course{CourseID=4022,Title="Microeconomics",Credits=3},
new Course{CourseID=4041,Title="Macroeconomics",Credits=3},
new Course{CourseID=1045,Title="Calculus",Credits=4},
new Course{CourseID=3141,Title="Trigonometry",Credits=4},
new Course{CourseID=2021,Title="Composition",Credits=3},
new Course{CourseID=2042,Title="Literature",Credits=4}
};
foreach (Course c in courses)
{
context.Courses.Add(c);
}
context.SaveChanges();
var enrollments = new Enrollment[]
{
new Enrollment{StudentID=1,CourseID=1050,Grade=Grade.A},
new Enrollment{StudentID=1,CourseID=4022,Grade=Grade.C},
new Enrollment{StudentID=1,CourseID=4041,Grade=Grade.B},
new Enrollment{StudentID=2,CourseID=1045,Grade=Grade.B},
new Enrollment{StudentID=2,CourseID=3141,Grade=Grade.F},
new Enrollment{StudentID=2,CourseID=2021,Grade=Grade.F},
new Enrollment{StudentID=3,CourseID=1050},
new Enrollment{StudentID=4,CourseID=1050},
new Enrollment{StudentID=4,CourseID=4022,Grade=Grade.F},
new Enrollment{StudentID=5,CourseID=4041,Grade=Grade.C},
new Enrollment{StudentID=6,CourseID=1045},
new Enrollment{StudentID=7,CourseID=3141,Grade=Grade.A},
};
foreach (Enrollment e in enrollments)
{
context.Enrollments.Add(e);
}
context.SaveChanges();
}
}
}
}
7.新搭建基架的项目
右键单击Controllers
文件夹-添加
–新搭建基架的项目
–MVC 控制器(带视图和使用Entity Framework)
–添加
。
依次选择模型类
–数据上下文类
–添加
。
8.数据库迁移
迁移文件的格式通常为<timestamp>_PascalName.cs
,PascalName
是任意的,但是为迁移文件使用有意义的名称是有帮助的。
//生成迁移文件
Add-Migration PascalName
//同步迁移文件到数据库
Update-Database
默认情况下,SQL Server Express LocalDB
会在 C:/用户/Administrator
目录下创建 .mdf
文件。
9.添加字段
首先将 Rating
属性添加到 Models/Movie.cs
。
public string? Rating { get; set; }
然后迁移更新数据库架构。
Add-Migration Rating
Update-Database
原创文章,作者:huoxiaoqiang,如若转载,请注明出处:https://www.huoxiaoqiang.com/csharp/entityframeworkcore/14607.html