首页 > 其他分享 >第18章 创建示例项目

第18章 创建示例项目

时间:2024-04-01 10:57:33浏览次数:26  
标签:Category set 示例 创建 get context 18 Supplier public

1 创建项目

创建一个MyWebApp的空项目。

dotnet new globaljson --sdk-version 3.1 --output MyWebApp
已成功创建模板“global.json file”。
dotnet new web --no-https --output MyWebApp --framework netcoreapp3.1
已成功创建模板“ASP.NET Core Empty”。
dotnet new sln -o MyWebApp
已成功创建模板“解决方案文件”。

dotnet sln MyWebApp add MyWebApp
已将项目“WebApp.csproj”添加到解决方案中。

2 添加数据模型

2.1 添加数据库NuGet包

Microsoft.EntityFrameworkCore.Design3.1.1版本

Microsoft.EntityFrameworkCore.SqlServer3.1.1版本

2.2 创建数据模型

在Models文件夹中创建三个类:Product、Supplier、Category。

/// <summary>
/// 产品
/// </summary>
public class Product
{
    public long ProductId { get; set; }

    public string Name { get; set; }
    [Column(TypeName = "decimal(8, 2)")]
    public decimal Price { get; set; }

    public long CategoryId { get; set; }
    public Category Category { get; set; }

    public long SupplierId { get; set; }
    public Supplier Supplier { get; set; }
}
/// <summary>
/// 供应商
/// </summary>
public class Supplier
{
    public long SupplierId { get; set; }
    public string Name { get; set; }
    public string City { get; set; }

    public IEnumerable<Product> Products { get; set; }
}
    /// <summary>
    /// 类别
    /// </summary>
    public class Category
    {
        public long CategoryId { get; set; }
        public string Name { get; set; }

        public IEnumerable<Product> Products { get; set; }
    }

Models文件夹中创建一个能访问数据库的EFCore上下文类DataContext。

public class DataContext : DbContext
    {
    public DataContext(DbContextOptions<DataContext> options) : base(options)
    {         
    }
    public DbSet<Product> Products { get; set; }    
    public DbSet<Supplier> Suppliers { get; set; }
    public DbSet<Category> Categories { get; set; } 
}

2.3 准备种子数据

Models文件夹中创建SeedData类,用来定义填充的种子数据。

    public static class SeedData
    {
        public static void SeedDatabase(DataContext context)
        {
            context.Database.Migrate();
            if (context.Products.Count() == 0 && context.Suppliers.Count() == 0 &&
                context.Categories.Count() == 0)
            {
                Supplier s1 = new Supplier { Name = "Splash Dudes", City = "San Jose" };
                Supplier s2 = new Supplier { Name = "Soccer Town", City = "Chicago" };
                Supplier s3 = new Supplier { Name = "Chess Co", City = "New York" };

                Category c1 = new Category { Name = "Watersports" };
                Category c2 = new Category { Name = "Soccer" };
                Category c3 = new Category { Name = "Chess" };

                context.Products.AddRange(
                    new Product { Name = "Kayak", Price = 275, Category = c1, Supplier = s1 },
                    new Product { Name = "Lifejacket", Price = 48.95m, Category = c1, Supplier = s1 },
                    new Product { Name = "Soccer Ball", Price = 19.50m, Category = c2, Supplier = s2 },
                    new Product { Name = "Corner Flags", Price = 34.95m, Category = c2, Supplier = s2 },
                    new Product { Name = "Stadium", Price = 79500, Category = c2, Supplier = s2 },
                    new Product { Name = "Thinking Cap", Price = 16, Category = c3, Supplier = s3 },
                    new Product { Name = "Unsteady Chair", Price = 29.95m, Category = c3, Supplier = s3 },
                    new Product { Name = "Human Chess Board", Price = 75, Category = c3, Supplier = s3 },
                    new Product { Name = "Bling-Bling King", Price = 1200, Category = c3, Supplier = s3 }
                );
                context.SaveChanges();
            }
        }
    }

2.4 配置EFCore服务和中间件

对Startup类进行更改

    public class Startup
    {
        public IConfiguration Configuration { get; set; }
        public Startup(IConfiguration config)
        {
            Configuration = config;
        }
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddDbContext<DataContext>(opts =>
            {
                opts.UseSqlServer(Configuration["ConnectionStrings:ProductConnection"]);
                opts.EnableSensitiveDataLogging(true);
            });
        }
        public void Configure(IApplicationBuilder app, IWebHostEnvironment env, DataContext context)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }

            app.UseRouting();

            app.UseEndpoints(endpoints =>
            {
                endpoints.MapGet("/", async context =>
                {
                    await context.Response.WriteAsync("Hello World!");
                });
            });

            SeedData.SeedDatabase(context);
        }
    }

在appsettings.json中定义配置字符串

{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft": "Warning",
      "Microsoft.Hosting.Lifetime": "Information",
      "Microsoft.EntityFrameworkCore": "Information"
    }
  },
  "AllowedHosts": "*",
  "ConnectionStrings": {
    "ProductConnection": "Server=.;Database=Products;MultipleActiveResultSets=true;User ID=sa;Pwd=123456;"
  }
}

2.5 创建和应用迁移

在WebApp项目文件夹中运行命令

创建迁移 dotnet ef migrations add Initial

将迁移应用到数据库dotnet ef database update

如果需要重置数据库,可运行dotnet ef database drop -force

3 添加CSS框架

安装LibMan工具包 Microsoft.Web.LibraryManager.Cli2.0.96

命令

dotnet tool uninstall --global Microsoft.Web.LibraryManager.Cli
dotnet tool install --global Microsoft.Web.LibraryManager.Cli --version 2.0.96

安装引导CSS框架

命令

libman init -p cdnjs

libman install [email protected] -d wwwroot/lib/twitter-bootstrap

或者在VS中选择添加客户端库

img

4 配置请求管道

定义一个简单中间件TestMiddleware.cs.

public class TestMiddleware
{
    private RequestDelegate _nextDelegate;
    public TestMiddleware(RequestDelegate nextDelegate)
    {
        _nextDelegate = nextDelegate;
    }

    public async Task Invoke(HttpContext context,DataContext dataContext)
    {
        if(context.Request.Path == "/test")
        {
                await context.Response.WriteAsync($"There are {dataContext.Products.Count()} products\n");
                await context.Response.WriteAsync($"There are {dataContext.Categories.Count()} categories\n");
                await context.Response.WriteAsync($"There are {dataContext.Suppliers.Count()} suppliers\n");
        }
        else
        {
            await _nextDelegate(context);
        }
    }
}

在Startup类中添加这个中间件组件

        public void Configure(IApplicationBuilder app, IWebHostEnvironment env, DataContext context)
        {
            ......
            app.UseRouting();
            app.UseMiddleware<TestMiddleware>();
            ......  
        }

5 运行项目

img

标签:Category,set,示例,创建,get,context,18,Supplier,public
From: https://www.cnblogs.com/nullcodeworld/p/18107934

相关文章

  • 20240318-20240331
    延迟了两周,这两周属实什么也没干。工作上的事情出了点岔子,副业也就勉强开了个头。这两个周末,一个周末自驾去了南昌,一个周末自驾回了趟家。属于一睁眼都在路上,一闭眼都在床上。工作上的事情虽说要努力完成,但是还是有点力不从心。这段时间关于人生、职业还是想了很多,但是终究是时......
  • 使用React 18和WebSocket构建实时通信功能
    1.引言WebSocket是一种在Web应用中实现双向通信的协议。它允许服务器主动向客户端推送数据,而不需要客户端发起请求。在现代的实时应用中,WebSocket经常用于实时数据传输、聊天功能、实时通知和多人协作等场景。在本篇博客中,我们将探索如何在React18应用中使用WebSocket来......
  • P1618 三连击(升级版)
    题目链接:#include<bits/stdc++.h>usingnamespacestd;intp[10],sum;intmain(){ intA,B,C; boolflag=false; scanf("%d%d%d",&A,&B,&C); for(inti=1;i<=999/C;i++){ memset(p,0,sizeofp); sum=0; ......
  • 6、GB28181
    GB28181是中国国家标准委员会发布的关于视频监控安防领域的网络视频监控系统技术规范,全称是“公共安全视频监控联网系统信息传输、交换、控制技术要求”。该标准规定了公共安全视频监控联网系统的互联结构、传输、交换、控制的基本要求和安全性要求,以及控制、传输流程和协议接口等......
  • 18_makefile基本语法(下)
    makefile基本语法(下)1.wildcard函数格式:$(wildcardPATTENR)功能:展开指定的目录举例:在/home/test目录有一个a.c的c文件和一个test的文件夹,在/home/test/test文件夹下有一个b.c的文件。​ 我们在当前目录下创建的makefile里面写下如下代码,echo前面加了@符号,echo这......
  • Vite + Vue3 项目的创建 ,启动 ,停止
    第一步:使用命令行创建工程在磁盘的合适位置上,创建一个空目录用于存储多个前端项目用vscode打开该目录在vocode中打开命令行运行如下命令npmcreatevite@latest第一次使用vite时会提示下载vite,输入y回车即可,下次使用vite就不会出现了注意:选择vue+JavaScript选项即可......
  • ubuntu使用-ubuntu23.10中创建arm架构的银河麒麟操作系统v10
    ubuntu使用-ubuntu23.10中创建arm架构的银河麒麟操作系统v10ubuntuqemu银河麒麟arm安装qemu之后,从应用中或者使用virt-manager命令打开虚拟系统管理器。创建虚拟机,架构选择aarch64,机器类型不知道选什么,暂选的是virt,后面有问题的话再说。参考国产银河麒麟操作系统下载地址收集--......
  • 实时数仓项目《二》-利用chatgpt prompt完成基础维表的创建
    系列文章:实时数仓项目《一》-实时数仓架构-CSDN博客目录5.ods->dwd:维表关联方案及维表加工、导入hbase5.1维表关联方案5.2退维后结果去向5.3创建维表:基础业务库表数据同步到hbase5.3.1cdc读取mysql数据,生成临时映射表5.3.2将目标表映射到Hbase中,生成临时映射......
  • web前端之页面逐渐呈现代码功能、对象数据如何获取下一个值、创建元素并添加id与类名
    MENU前言style(全部代码)JavaScript(核心代码)html(基本代码)前言1、效果演示以视频为准,暂未录视频(敬请期待);2、私信或微信可获取完整代码(WX:MJ682517)style(全部代码)*{margin:0;padding:0;box-sizing:border-box;}::-webkit-scrol......
  • 蓝桥杯2018年第十三届省赛真题-复数幂
    一、题目复数幂设i为虚数单位。对于任意正整数n,(2+3i)^n的实部和虚部都是整数。求(2+3i)^123456等于多少?即(2+3i)的123456次幂,这个数字很大,要求精确表示。答案写成"实部±虚部i"的形式,实部和虚部都是整数(不能用科学计数法表示),中间任何地方都不加空格,实部为正时前面......