《Asp.Net Core3 + Vue3入坑教程》 - 4.EF Core & Postgresql

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

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

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

Asp.Net Core后端项目

后端项目搭建与Swagger配置步骤

配置CROS策略解决跨域问题

AutoMapper & Restful API & DI

(本文)EF Core & Postgresql

(暂未发表敬请期待...).Net Core 3升级成 .Net Core 5

(暂未发表敬请期待...)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

《Asp.Net Core3 + Vue3入坑教程》 - 4.EF Core & Postgresql

安装 navicat

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

官网下载

运行navicat 链接 postgresql 数据库

《Asp.Net Core3 + Vue3入坑教程》 - 4.EF Core & Postgresql

连接配置如下,密码123456

《Asp.Net Core3 + Vue3入坑教程》 - 4.EF Core & Postgresql

准备工作就绪,这时候回到项目中 安装Microsoft.EntityFrameworkCore Nuget包

《Asp.Net Core3 + Vue3入坑教程》 - 4.EF Core & Postgresql

安装Microsoft.EntityFrameworkCore.Design Nuget包

《Asp.Net Core3 + Vue3入坑教程》 - 4.EF Core & Postgresql

安装Npgsql.EntityFrameworkCore.PostgreSQL Nuget包

《Asp.Net Core3 + Vue3入坑教程》 - 4.EF Core & Postgresql

增加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接口

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpygyg.html