.Net Core 2. VS2022 + Core6.0 + Razor 添加模型

发布时间 2023-05-09 17:40:51作者: luytest

这里基本是按照微软的文档示例整理的

 

添加数据模型

在项目中新增Models文件夹,用于存放数据模型

 

新增movie类

using System.ComponentModel.DataAnnotations;

namespace StandardCoreStudy.Models
{
    public class Movie
    {
        /// <summary>
        /// ID
        /// </summary>
        public int ID { get; set; }
        /// <summary>
        /// 标题
        /// </summary>
        public string Title { get; set; } = string.Empty;

        /// <summary>
        /// 发布日期
        /// 表示发布日期只需要日期,不需要精确到时间部分
        /// </summary>
        [DataType(DataType.Date)]
        public DateTime ReleaseDate { get; set; }
        /// <summary>
        /// 类型
        /// </summary>
        public string Genre { get; set; } = string.Empty;
        /// <summary>
        /// 价格
        /// </summary>
        public decimal Price { get; set; }
    }
}

 

引入必须组件

Nuget引入组件 Microsoft.EntityFrameworkCore.Design 和 Microsoft.EntityFrameworkCore.SqlServer。

选个最新的版本安装就好。

 

自动生成代码

创建“Pages/Movies”文件夹,这里用来放对应的页面。

 在Movies文件夹上右键,添加 “已搭建基架的新项”,选择 “使用实体框架的 Razor Pages (CRUD)”

 在选择 模型类 的地方选择之前建立的Models/Movie,数据上下文 点 + 号 用系统生成的上下文类名就行。

 点击添加,会在Movies下自动生成多个页面,就是自动生成的增删查改等,实际开发当然不会这么简单,但是入门就无所谓了。

 同时会新建一个Data文件夹,里面是之前设置 数据上下文 时命名的上下文类文件,也就是通过这个类来访问数据库。

 并且在Program.cs中会自动生成代码

using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using StandardCoreStudy.Data;
var builder = WebApplication.CreateBuilder(args);

// Add services to the container.
builder.Services.AddRazorPages();
builder.Services.AddDbContext<StandardCoreStudyContext>(options =>
    options.UseSqlServer(builder.Configuration.GetConnectionString("StandardCoreStudyContext") ?? throw new InvalidOperationException("Connection string 'StandardCoreStudyContext' not found.")));

对比一下最早的Program.cs可以发现,自动生成的就是 Data中 数据上下文类的相关代码以及引用。

 

使用EF迁移功能创建初始数据库架构

打开PM Console

 输入命令:Add-Migration InitialCreate

migrations 命令生成用于创建初始数据库架构的代码。 该架构基于在 DbContext 中指定的模型。 InitialCreate 参数用于为迁移命名。 可以使用任何名称,但是按照惯例,会选择可说明迁移的名称。

回车后可以看到项目里新增了

 其中这个带日期的xxxxxx_InitialCreate.cs中,就是生成的创建初始数据库架构的代码

命令:Update-Database

update 命令在尚未应用的迁移中运行 Up 方法。 在这种情况下,update 在用于创建数据库的 Migrations/<time-stamp>_InitialCreate.cs 文件中运行 Up 方法。

 

数据上下文StandardCoreStudyContext

基架工具会自动创建数据上下文,并通过依赖关系注入注册相关服务

这就是Program.cs中注册服务的代码

builder.Services.AddDbContext<StandardCoreStudyContext>(options =>
    options.UseSqlServer(builder.Configuration.GetConnectionString("StandardCoreStudyContext") ?? throw new InvalidOperationException("Connection string 'StandardCoreStudyContext' not found.")));

而数据上下文的作用是:

  指定数据模型中包含哪些实体。

  为指定模型(本例中的Movie)协调 EF Core 功能,例如“创建”、“读取”、“更新”和“删除”。

namespace StandardCoreStudy.Data
{
    public class StandardCoreStudyContext : DbContext
    {
        public StandardCoreStudyContext (DbContextOptions<StandardCoreStudyContext> options)
            : base(options)
        {
        }

        public DbSet<StandardCoreStudy.Models.Movie> Movie { get; set; } = default!;
    }
}

可以尝试访问 Index,Create页面,正常情况下这两个页面能打开。