zoukankan      html  css  js  c++  java
  • 《Asp.Net Core3 + Vue3入坑教程》

    简介

    《Asp.Net Core3 + Vue3入坑教程》 此教程适合新手入门或者前后端分离尝试者。可以根据图文一步一步进操作编码也可以选择直接查看源码。每一篇文章都有对应的源码

    教程后期会将 .Net Core 3升级成 .Net Core 5

    目录

    《Asp.Net Core3 + Vue3入坑教程》系列教程目录

    Asp.Net Core后端项目

    1. 后端项目搭建与Swagger配置步骤
    2. 配置CROS策略解决跨域问题
    3. AutoMapper & Restful API & DI
    4. (本文)EF Core & Postgresql
    5. (暂未发表敬请期待...).Net Core 3升级成 .Net Core 5
    6. (暂未发表敬请期待...)JWT

    Vue3 前端项目

    暂未发表敬请期待...

    本文简介

    本文为《Asp.Net Core3 + Vue3入坑教程》系列教程的后端第四篇 - EF Core & Postgresql。上文已经为Simple项目增加了Restful API 但是数据是模拟出来的,本文继续为Simple项目增加与Postgresql数据库的连接,并使用EF Core ORM框架实现与数据库的交互。

    EF Core & Postgresql

    安装postgresql数据库

    直接进官网下载 https://www.postgresql.org/

    安装完成后,找到安装目录启动psql.exe

    安装 navicat

    也可以不安装navicat,使用其他数据库客户端

    官网下载 http://www.navicat.com.cn/

    运行navicat 链接 postgresql 数据库

    连接配置如下,密码123456

    准备工作就绪,这时候回到项目中

    安装Microsoft.EntityFrameworkCore Nuget包

    安装Microsoft.EntityFrameworkCore.Design Nuget包

    安装Npgsql.EntityFrameworkCore.PostgreSQL Nuget包

    增加Postgresql链接配置,调整Startup.cs

    代码如下:

    using Microsoft.AspNetCore.Builder;
    using Microsoft.AspNetCore.Hosting;
    using Microsoft.EntityFrameworkCore;
    using Microsoft.Extensions.DependencyInjection;
    using Microsoft.Extensions.Hosting;
    using Newtonsoft.Json.Serialization;
    using Simple_Asp.Net_Core.Data;
    using Simple_Asp.Net_Core.ServiceProvider;
    using System;
    
    namespace Simple_Asp.Net_Core
    {
        public class Startup
        {
            // This method gets called by the runtime. Use this method to add services to the container.
            // For more information on how to configure your application, visit https://go.microsoft.com/fwlink/?LinkID=398940
            public void ConfigureServices(IServiceCollection services)
            {
                services.AddDbContext<CommanderContext>(options =>
                    options.UseNpgsql("Host=localhost;Database=postgres;Username=postgres;Password=123456"));
    
                services.AddCORS();
                services.AddMvc();
                services.AddSwagger();
    
                services.AddAutoMapper(AppDomain.CurrentDomain.GetAssemblies());
    
                services.AddScoped<ICommanderRepo, MockCommanderRepo>();
    
                services.AddControllers().AddNewtonsoftJson(s =>
                {
                    s.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
                });
            }
    
            // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
            public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
            {
                if (env.IsDevelopment())
                {
                    app.UseDeveloperExceptionPage();
                    app.UseSwagger();
                    app.UseSwaggerUI(c =>
                    {
                        c.SwaggerEndpoint("/swagger/v1/swagger.json", "ApiHelp V1");
                    });
                }
    
                app.UseCors("CorsTest");
    
                app.UseRouting();
                app.UseEndpoints(endpoints => endpoints.MapDefaultControllerRoute());
            }
        }
    }
    
    

    在Data文件夹下新建类CommanderContext.cs

    使用 EF Core 时,数据访问是通过使用模型来执行的。 模型由(域模型)实体类和表示与数据库的会话的派生上下文 (DbContext) 组成。更多内容参考 https://docs.microsoft.com/zh-cn/dotnet/api/microsoft.entityframeworkcore.dbcontext?view=efcore-5.0

    代码如下

    using Microsoft.EntityFrameworkCore;
    using Simple_Asp.Net_Core.Models;
    
    namespace Simple_Asp.Net_Core.Data
    {
        public class CommanderContext : DbContext
        {
            public CommanderContext(DbContextOptions<CommanderContext> opt) : base(opt)
            {
            }
    
            public DbSet<Command> Commands { get; set; }
        }
    }
    
    
    

    实现 ICommanderRepo 仓储层接口,在Data文件夹下新建类 SqlCommanderRepo.cs

    using Simple_Asp.Net_Core.Models;
    using System;
    using System.Collections.Generic;
    using System.Linq;
    
    namespace Simple_Asp.Net_Core.Data
    {
        public class SqlCommanderRepo : ICommanderRepo
        {
            private readonly CommanderContext _context;
    
            public SqlCommanderRepo(CommanderContext context)
            {
                _context = context;
            }
    
            public void CreateCommand(Command cmd)
            {
                if (cmd == null)
                {
                    throw new ArgumentNullException(nameof(cmd));
                }
    
                _context.Commands.Add(cmd);
            }
    
            public void DeleteCommand(Command cmd)
            {
                if (cmd == null)
                {
                    throw new ArgumentNullException(nameof(cmd));
                }
                _context.Commands.Remove(cmd);
            }
    
            public IEnumerable<Command> GetAllCommands()
            {
                return _context.Commands.ToList();
            }
    
            public Command GetCommandById(int id)
            {
                return _context.Commands.FirstOrDefault(p => p.Id == id);
            }
    
            public bool SaveChanges()
            {
                return (_context.SaveChanges() >= 0);
            }
    
            public void UpdateCommand(Command cmd)
            {
                //Nothing
            }
        }
    }
    

    再次调整 Startup.cs ,将ICommanderRepo 接口实现替换成SqlCommanderRepo

    services.AddScoped<ICommanderRepo, MockCommanderRepo>();
        =>
    services.AddScoped<ICommanderRepo, SqlCommanderRepo>();
    
    

    使用swagger进行调试,调用/api/Commands接口

    因为数据库中缺少Commands表,所以后端报错了,接下来我们使用EF自动创建Commands表

    打开开发者命令提示窗口

    接下来会使用到 .Net Core CLI命令,具体可以参考 https://docs.microsoft.com/zh-cn/dotnet/core/tools/

    将EF注册成全局工具

    命令如下:

    dotnet tool install --global dotnet-ef
    

    执行迁移初始化命令

    命令如下:

    dotnet ef migrations add InitialMigration
    

    发现报错了

    因为当前文件夹找不到解决方案,所以报错了

    进入Simple_Asp.Net_Core文件夹再次执行迁移初始化命令

    命令如下:

    cd Simple_Asp.Net_Core
    
    dotnet ef migrations add InitialMigration
    
    

    执行成功

    在项目中可以看到生成了Migrations文件夹

    接下来使用EF将表的变化更新到Postgresql数据库上

    cd Simple_Asp.Net_Core
    
    dotnet ef database update
    

    打开navicat,可以发现增加了两张表,一张是EF迁移历史表,另一张就是Commands表

    现在本章针对Simple项目的代码编写与EF配置工作已经完成!

    现在我们可以使用swagger进行接口测试,并查看数据是否有正确保存与返回

    总结

    本文为Simple项目增加与Postgresql数据库的连接,这里数据库可以替换成其他数据库,只需引入正确Nuget包,以及调整数据库连接配置即可!本文应用的是EF Core里的Code First方式进行开发,EF Core的内容很多本文只有简单的使用,更多知识可以参考 https://docs.microsoft.com/en-us/ef/core/ 文档进行深入学习!

    GitHub源码

    注意:源码调试过程中如果出现xml文件路径错误,需要参照第一章(后端项目搭建与Swagger配置步骤)Swagger配置“配置XML 文档文件”步骤,取消勾选然后再选中 ,将XML路径设置成与你的电脑路径匹配!

    https://github.com/Impartsoft/Simple_Asp.Net_Core/tree/master/Simple_Asp.Net_Core 4.EF Core %26 Postgresql

    参考资料

    EF Core官网文档(推荐学习) https://docs.microsoft.com/en-us/ef/core/

    .Net Core CLI命令 https://docs.microsoft.com/zh-cn/dotnet/core/tools/

    微软官方文档 https://docs.microsoft.com/zh-cn/aspnet/core/?view=aspnetcore-5.0

    欢迎大家批评指正,共同学习,共同进步!
    作者:Iannnnnnnnnnnnn
    出处:https://www.cnblogs.com/Iannnnnnnnnnnnn
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    Introduction to XQuery in SQL Server 2005
    [译]Cassandra 架构简述
    冬日绘版实录
    网页实现串口TCP数据通讯的两种方案
    (转)感知哈希算法
    CoreParking
    单线程扫描电脑所有文件与并行计算扫描电脑所有文件所用时间?
    强名称程序集
    一些题(六)
    一些题(五)
  • 原文地址:https://www.cnblogs.com/Iannnnnnnnnnnnn/p/14438885.html
Copyright © 2011-2022 走看看