首页 > 编程语言 >ASP.NET Core MVC 练习项目

ASP.NET Core MVC 练习项目

时间:2024-06-07 12:02:16浏览次数:16  
标签:Core ASP WebDbContext builder 数据库 MVC WebAppMVC using public

目录

一、开发环境

二、项目搭建

2.1 创建ASP.NET MVC项目

2.2 导入相关程序包

2.3 创建模型类、数据库上下文

2.4 配置连接数据库、配置数据库上下文、注册数据库上下文

2.5 数据迁移、添加初始数据

三、业务实现

3.1 新建接口类文件夹IService,并在文件夹中创建IGetService接口

3.2 在IService文件夹中创建GetsService类,继承接口IGetService并实现

3.3 将IGetService接口进行注册

3.4 创建StudentController控制器

3.5 创建Index视图

四、运行结果


非开发工作,纯属兴趣爱好,写的不好的地方还请留言

一、开发环境

Visual Studio 2022

EF Core

SQL Server2019

ASP.NET Core 6

二、项目搭建
2.1 创建ASP.NET MVC项目

2.1.1 创建新项目

2.1.2 选择ASP.NET Core Web 应用(模型-视图-控制器)

2.1.3 输入项目名称,选择存放文件夹

2.1.4 选择框架(选择.NET6)后,点击创建

2.2 导入相关程序包

2.2.1 将所需要的三个程序包提过nuget导入

2.3 创建模型类、数据库上下文

2.3.1 Models文件夹下,创建模型类Student

    public class Student
    {
        public int Id { get; set; }
        public string ? Name { get; set; }
        public int Age { get; set; }
        public bool Sex { get; set; }
        public string ? Address { get; set; }
    }

2.3.2 项目下,添加Data文件夹,在Data文件夹中添加WebDbContext类

2.4 配置连接数据库、配置数据库上下文、注册数据库上下文

2.4.1 在appsettings.json文件中配置连接数据库

因为采用Code First模式,所以字符串中的Initial Catalog=Db_Web,对应的是将要创建的数据库名称,这里自行修改;

{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft.AspNetCore": "Warning"
    }
  },
  "AllowedHosts": "*",
  "ConnectionStrings": {
    "WebDbContext": "Data Source=.;Initial Catalog=Db_Web;Integrated Security=True;TrustServerCertificate=True"
  }
}

2.4.2 在WebDbContext类中配置数据库上下文

using Microsoft.EntityFrameworkCore;
using WebAppMVC.Models;

namespace WebAppMVC.Data
{
    public class WebDbContext:DbContext
    {
        public WebDbContext(DbContextOptions<WebDbContext> options) : base(options) { }
        public DbSet<Student> Students { get; set; } //指定数据库创建的表名
        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            base.OnModelCreating(modelBuilder);
            modelBuilder.Entity<Student>().Property(e => e.Name).HasMaxLength(50);//指定数据库表字段的长度
            modelBuilder.Entity<Student>().Property(e => e.Address).HasMaxLength(100);
        }
    }
}

2.4.3 在Program类中注册数据库上下文

// Add services to the container.
builder.Services.AddControllersWithViews();
//注册数据库上下文
builder.Services.AddDbContext<WebDbContext>(options=>
options.UseSqlServer(builder.Configuration.GetConnectionString("WebDbContext")));

var app = builder.Build();
2.5 数据迁移、添加初始数据

2.5.1在Data文件夹中添加SeedData类,并添加以下代码

using Microsoft.EntityFrameworkCore;
namespace WebAppMVC.Data
{
    public static class SeedData
    {
        public static void SData(IServiceProvider serviceProvider)
        {
            WebDbContext context = null;
            using (context = new WebDbContext(serviceProvider.GetRequiredService<DbContextOptions<WebDbContext>>()))
            {
                if (context.Students.Any())
                {
                    return;
                }
                context.Students.AddRange(
                    new Models.Student() { Name = "张三", Age = 17, Sex = true, Address = "湖南长沙" },
                    new Models.Student() { Name = "李四", Age = 18, Sex = false, Address = "湖南长沙" },
                    new Models.Student() { Name = "王五", Age = 19, Sex = true, Address = "湖南长沙" },
                    new Models.Student() { Name = "赵六", Age = 20, Sex = false, Address = "湖南长沙" }
                    );
                context.SaveChanges();
            }
        }
    }
}

2.5.2 将初始化数据注册到服务中

// Add services to the container.
builder.Services.AddControllersWithViews();
//注册数据库上下文
builder.Services.AddDbContext<WebDbContext>(options=>
options.UseSqlServer(builder.Configuration.GetConnectionString("WebDbContext")));
//注册接口
builder.Services.AddScoped<IGetService<Student>,GetsService>();
    var app = builder.Build();

using (var scope=app.Services.CreateScope())
{
    var service=scope.ServiceProvider;
    SeedData.SData(service);
}

2.5.3 在程序包管理控制台输入:Add-Migration initialcreate,之后再输入Update-DataBase,检查SQL server是否生成了数据库;

三、业务实现
3.1 新建接口类文件夹IService,并在文件夹中创建IGetService接口
namespace WebAppMVC.IService
{
    public interface IGetService<T> where T : class
    {
        List<T> GetServices();
    }
}
3.2 在IService文件夹中创建GetsService类,继承接口IGetService并实现
using WebAppMVC.Data;
using WebAppMVC.Models;

namespace WebAppMVC.IService
{
    public class GetsService : IGetService<Student>
    {
        private readonly WebDbContext _db;
        public GetsService(WebDbContext db)
        {
            _db = db;
        }
        public List<Student> GetServices()
        {
            var list=_db.Students.ToList();
            return list;
        }
    }
}
3.3 将IGetService接口进行注册
// Add services to the container.
builder.Services.AddControllersWithViews();
//注册数据库上下文
builder.Services.AddDbContext<WebDbContext>(options=>
options.UseSqlServer(builder.Configuration.GetConnectionString("WebDbContext")));
//注册接口
builder.Services.AddScoped<IGetService<Student>,GetsService>();

var app = builder.Build();
3.4 创建StudentController控制器
using Microsoft.AspNetCore.Mvc;
using WebAppMVC.IService;
using WebAppMVC.Models;

namespace WebAppMVC.Controllers
{
    public class StudentController : Controller
    {
        private readonly IGetService<Student> _service;
        public StudentController(IGetService<Student> service)
        {
            _service = service;
        }

        public IActionResult Index()
        {
            var list = _service.GetServices();
            return View();
        }
    }
}
3.5 创建Index视图

@{
    ViewData["Title"] = "查询所有";
}
@model List<Student>
<div>
    <table class="table table-bordered">
        <tr>
            <td>姓名</td>
            <td>年龄</td>
            <td>性别</td>
            <td>住址</td>
        </tr>
        @foreach (var item in Model)
        {
            <tr>
                <td>@item.Name</td>
                <td>@item.Age</td>
                @if (item.Sex == true)
                {
                    <td>男</td>
                }
                else
                {
                    <td>女</td>
                }
                <td>@item.Address</td>
            </tr>
        }
    </table>
</div>
四、运行结果

4.1 修改起始路由信息

app.MapControllerRoute(
    name: "default",
    pattern: "{controller=Student}/{action=Index}/{id?}");

app.Run();

4.2 运行结果

4.2 总结

该Demo涉及到的技术点包含:ASP.NET Core、MVC、EF Core、Code First,其中接口部分所使用泛型接口,第一次发表文章,有些地方可能描述有问题,还请见谅。

标签:Core,ASP,WebDbContext,builder,数据库,MVC,WebAppMVC,using,public
From: https://blog.csdn.net/weixin_51164103/article/details/139468834

相关文章

  • ASP.NET Core MVC 接上篇新增加“增删改查”操作
    前言由于上一篇文章只写了怎么创建项目以及一个查询操作,这篇文章将把增删改查的操作补齐,希望能帮助到一同学习的小伙伴,内容中如有不懂的点,可参考ASP.NETCore官方文档,如有写的不对的,请在评论区补充,主打听劝;增删改查接口类publicinterfaceIGetService<T>whereT:cl......
  • EFCore和EF6的使用和区别
    1、Sqlserver是微软的亲儿子,很少会报错,EF报错问题最多出现在Mysql。以下使用mysql为例子C#一般很形象,带Core的都是.NetCore平台的。所以在.NetFramework平台我们使用EF6,也就是EntityFramework6在.NetCore平台使用EFCore2、直接上代码(.Net6)internalclassProgram{......
  • Entity Framwork Core (一)
    ORM:ObjectRelationalMapping。让开发者用对象操作的形式操作关系数据库。从面向数据库集中到面向对象。NugetMicrosoft.EntityFrameworkCore//针对于sqlserverMicrosoft.EntityFrameworkCore.SqlServerMicrosoft.EntityFrameworkCore.Design//在vs中需要装Microsoft.......
  • Spring - AOP - @EnableAspectAutoJAutoProxy 与其属性exposeProxy,proxyTargetClass
    这三个属性是Spring框架中与AOP(面向切面编程)相关的配置。 EnableAspectJAutoProxy:这是一个注解,用于开启Spring对AspectJ的自动代理功能。  exposeProxy:这个属性用于配置是否需要将代理对象暴露给AOP创建的Subject,这样就可以在代理对象内部通过AopContext.currentProxy......
  • Spring 云网关 MVC 异常处理
    我正在编写一个使用SpringCloudGatewayMVC构建的APIGateway应用程序。我使用了一个自定义的CircuitBreaker过滤器,该过滤器可在后端请求耗时过长时超时。我发现当请求超时时......我无法通过向客户端发送JSON格式的响应来优雅地处理失败。我拥有带有Exce......
  • C# .NET 6 使用WorkFlow Core 创建工作审批流
    1,背景工作流思想在上世纪60年代就有人提出过;70年代就有人开始尝试,但是由于当时许多的限制,工作流一直没有成功的被实现;80年代才出现第一批成功的工作流系统;90年代工作流技术走向了第一个发展高峰期;90年代后至今工作流出现了很多版本,但是主旨还是不变的,为了使我们的工作变得更......
  • C# .NET 6 使用WorkFlow Core 创建工作审批流
    1,背景工作流思想在上世纪60年代就有人提出过;70年代就有人开始尝试,但是由于当时许多的限制,工作流一直没有成功的被实现;80年代才出现第一批成功的工作流系统;90年代工作流技术走向了第一个发展高峰期;90年代后至今工作流出现了很多版本,但是主旨还是不变的,为了使我们的工作变得更......
  • .NET Core中灵活使用反射
    前言前段时间有朋友问道一个这样的问题,.NETCore中如何通过Attribute的元数据信息来调用标记的对应方法。我第一时间想到的就是通过C#反射获取带有CustomAttribute标记的类,然后通过依赖注入(DI)的方式获取对应服务的方法并通过反射动态执行类的方法,从而实现更灵活的编程方式。......
  • 从零开始的.NET项目(一)配置EFCore
    目标框架:.net6.0操作系统:macos编译器:Rider内容:配置EFCore,使用CodeFrist创建mssql数据库,并存入种子数据数据库准备如果使用的是vs编译器的话,其实就不用准备数据库了,直接用vs自带的数据库,嘎嘎好使......
  • ASP.NET Core应用程序9:使用内置的标签助手
      ASP.NETCore提供了一组内置的标签助手,可以应用最常用的元素转换。使用了内置的标签助手,就不必像前一章一样自己创建自定义标签助手。  本章描述了基本的内置标签助手,并解释了它们是如何用于转换锚、链接、脚本和图像元素的。还解释了如何缓存内容部分以及如何根据应用程......