2.Entity Framework Core步骤

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.csSeedData静态类名和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.csPascalName是任意的,但是为迁移文件使用有意义的名称是有帮助的。

//生成迁移文件
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

(0)
上一篇 2022年6月1日 23:04
下一篇 2022年6月3日 18:48

相关推荐

  • 4.Entity Framework Core特性

    Entity Framework Core特性位于System.ComponentModel.DataAnnotations 命名空间 和 System.ComponentModel.DataAnnotations.Schema 命名空间。 1.System.ComponentModel.DataAnnotations…

  • 3.Entity Framework Core关系

    1.实体与属性 默认情况下,如果在类型上发现导航属性,将创建关系。 如果它指向的类型不能由当前数据库提供程序映射为标量类型,则属性被视为导航属性。 1.1主体实体 主体实体是指包含主体键/备选键属性的实体。有时被称为关系的“父级”。 1.2依赖实体 依赖实体是指包含外键属性的实体。有时被称为关系的“子级”。 1.3主体…

  • 5.Entity Framework Core CRUD

    1.实体状态 数据库上下文会跟踪内存中的实体并设置该实体的状态,从而决定调用 SaveChanges 方法时发出的SQL命令,最终实现与数据库中相应的行同步。 状态 SaveChanges方法 Added SQL INSERT 命令 Unchanged 不需要通过 SaveChanges&…

发表评论

登录后才能评论