.NET8入门:3.通过EF Core实现数据库CRUD

                在.NET中EF Core是常用ORM之一,本文中通过EF Core ORM来实现对数据库数据的增删改查,关于EF Core更多详细内容请参考微软官方文档:

入门 - EF Core | Microsoft Learn

1. 通过Nuget包管理器添加EF Core引用

        1.1 选中依赖项——>右键——>管理Nuget程序包——>输入Entity——>选中Microst.EntityFrameworkCore.SqlServer——>安装。

        1.2 安装成功后。将在依赖项的包下能看到Microst.EntityFrameworkCore.SqlServer包的引用。

        PS:该处作者选择的数据库为SqlServer。

2. .添加数据模型

        2.1新建Models文件夹。

         2.1 在Models文件夹中新建Movie类。

        2.2 Models——Movie.cs        电影实体类

using System.ComponentModel.DataAnnotations;

namespace Demo.Models
{
    public class Movie
    {
        //主键ID
        public int Id { get; set; }

        //标题
        public string? Title { get; set; }

        //发布日期
        //通过DataType(DataType.Date)特性实现该字段只输入和输出日期
        [DataType(DataType.Date)]
        public DateTime ReleaseDate { get; set; }

        //类型
        public string? Genre { get; set; }

        //价格
        public decimal Price { get; set; }
    }
}

3. 使用.NET Core基架生成CRUD页面

3.1 在Pages文件夹下创建Movies文件夹

        3.2 在Movies文件夹中创建基于Razor引擎的CURD页面

这个过程可能会自动安装一些Nuget包,请耐心等待。

通过基架生成完CRUD页面后,将在Movies文件夹下看到以下文件,对应上面选择实体类的CURD操作。

在Program.cs文件中将自动注入基架中选择的数据库上下文对象。

在appsetting.json文件中也将自动添加对应的数据库连接字符串(默认为本地连接)。

        3.3 在Program.cs中通过默认路由设置默认启动页面

  4. EF Core通过Code First生成数据库

 4.1 在工具中找到NuGet包管理器控制台(PMC)。

4.2在控制台执行以下命令:

Install-Package Microsoft.EntityFrameworkCore.Tools
Add-Migration InitialCreate
Update-Database

4.3在执行完Add-Migration命令后,将生成Migrations文件夹。该文件夹下会包含迁移文件以及迁移快照。具体内容请参考微软官方文档:

迁移概述 - EF Core | Microsoft Learn

4.4在执行完Update-Database命令后,从视图中进入SQL Server对象资源管理器能看到根据刚才的类生成的数据库。

PS:appsetting.json文件中的(localdb)\mssqllocaldb指向的是Visual Studio自带数据库。

                4.5 选中根据Movie实体生成的表,进入视图设计器查看根据Movie实体生成的表。

  5. 根据基架生成的CRUD页面进行Movie表的增删改查

5.1 新增Movie表操作入口

修改Pages/Index.cshtml内容如下所示:

@page
@model IndexModel
@{
    ViewData["Title"] = "Home page";
}

<div class="text-center">
    <h1 class="display-4">Welcome</h1>
    <p>Learn about <a href="https://learn.microsoft.com/aspnet/core">
       building Web apps with ASP.NET Core</a>.</p>
    <p>进入 <a href="/Movies">Movie</a>.</p>
</div>

修改后启动项目,点击Movie可进入Movie增删改查界面,项目界面如图:

5.2 新增Movie表数据

点击Create new,进入新增页面如图:

单击Create后将新增一条数据到Movie表,我们来根据这个界面分析下通过.NET Core向数据库新增数据(C)的简单用法。

在Pages/Movies/Createl中,包含前端页面文件cshtml以及后台文件cshtml.cs

asp-tag这种语法来源于ASP.NET Core 内置标记帮助程序,详情参考微软官方文档:

ASP.NET Core 内置标记帮助程序 | Microsoft Learn

在页面通过@model绑定了model文件。

form中的post指定了表单提交后会访问后台OnPostAsync方法。

input中的asp-for=“Movie.Title”表示双向绑定到Demo.Pages.Movies.CreateModel类中的Movie对象。

@page        
@model Demo.Pages.Movies.CreateModel

@{
    ViewData["Title"] = "Create";
}

<h1>Create</h1>

<h4>Movie</h4>
<hr />
<div class="row">
    <div class="col-md-4">
        <form method="post">
            <div asp-validation-summary="ModelOnly" class="text-danger"></div>
            <div class="form-group">
                <label asp-for="Movie.Title" class="control-label"></label>
                <input asp-for="Movie.Title" class="form-control" />
                <span asp-validation-for="Movie.Title" class="text-danger"></span>
            </div>
            <div class="form-group">
                <label asp-for="Movie.ReleaseDate" class="control-label"></label>
                <input asp-for="Movie.ReleaseDate" class="form-control" />
                <span asp-validation-for="Movie.ReleaseDate" class="text-danger"></span>
            </div>
            <div class="form-group">
                <label asp-for="Movie.Genre" class="control-label"></label>
                <input asp-for="Movie.Genre" class="form-control" />
                <span asp-validation-for="Movie.Genre" class="text-danger"></span>
            </div>
            <div class="form-group">
                <label asp-for="Movie.Price" class="control-label"></label>
                <input asp-for="Movie.Price" class="form-control" />
                <span asp-validation-for="Movie.Price" class="text-danger"></span>
            </div>
            <div class="form-group">
                <input type="submit" value="Create" class="btn btn-primary" />
            </div>
        </form>
    </div>
</div>

<div>
    <a asp-page="Index">Back to List</a>
</div>

@section Scripts {
    @{await Html.RenderPartialAsync("_ValidationScriptsPartial");}
}

.cshtml.cs继承自PageModel。

_context为基架生成的数据库上下文,用于EF Core跟数据库进行交互。

构造函数中会注入数据库上下文。

OnGet方法会在访问该页面时被调用。

[BindProperty]

public Movie Movie { get; set; } = default!;

这句代码表示该对象与cshtml中的@model里的model进行双向绑定,前端数据发生变化时,该对象中的数据也跟着变化。该对象数据变化时,前端数据也跟随变化。

OnPostAsync()方法会在页面触发表单提交时被调用。

_context.Movie.Add(Movie);

await _context.SaveChangesAsync();

这两句代码通过EF向数据库的Movie表中添加了一条数据,并保存。

using Demo.Models;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;

namespace Demo.Pages.Movies
{
    public class CreateModel : PageModel
    {
        private readonly Demo.Data.DemoContext _context;

        public CreateModel(Demo.Data.DemoContext context)
        {
            _context = context;
        }

        public IActionResult OnGet()
        {
            return Page();
        }

        [BindProperty]
        public Movie Movie { get; set; } = default!;

        // To protect from overposting attacks, see https://aka.ms/RazorPagesCRUD
        public async Task<IActionResult> OnPostAsync()
        {
            if (!ModelState.IsValid)
            {
                return Page();
            }

            _context.Movie.Add(Movie);
            await _context.SaveChangesAsync();

            return RedirectToPage("./Index");
        }
    }
}

5.3 删除、查询和修改可以在页面进行操作,具体的ASP.NET Core 内置标记帮助程序请移步:

ASP.NET Core 内置标记帮助程序 | Microsoft Learn

EF Core详情移步:

Entity Framework Core 概述 - EF Core | Microsoft Learn

该章节大致介绍了如何通过.NET8的基架实现一个Web项目的CRUD功能,以及EF Core简单实用,后续将详细介绍.NET Core Web中的其他内容。

PS:本文内容参考自微软官方文档

                                                                                      观众老爷们,山水有相逢,咱们下期再会。​

  • 29
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值