首页 > 数据库 >ASP .Net Core: 使用EF连接postgresql

ASP .Net Core: 使用EF连接postgresql

时间:2023-10-09 13:57:49浏览次数:42  
标签:Core set postgresql string get ASP Team dotnet public

备注

关于数据库的创建,可参考下方的链接,去创建测试环境,我已经有现成的数据库,故不再记录创建数据库的过程。

实现步骤

安装EF工具

dotnet tool install --global dotnet-ef

安装其他依赖

dotnet add package Npgsql.EntityFrameworkCore.PostgreSQL
dotnet add package Microsoft.EntityFrameworkCore.Design
dotnet add package Microsoft.EntityFrameworkCore.Tools

添加数据连接信息

"ConnectionStrings": {
    "WebApiDatabase": "Host=[]; Database=[]; Username=[]; Password=[]"
  },

需要注意的是,我隐藏了自己的配置信息,请将[]替换为自己的内容

文件目录导览

image

创建一个Data文件夹,并创建ApiDbContext

using Microsoft.EntityFrameworkCore;

namespace DbExploration.Data;

public class ApiDbContext : DbContext
{
    public ApiDbContext(DbContextOptions<ApiDbContext> options):base(options) {  }
}

在program.cs文件中添加配置

builder.Services.AddEntityFrameworkNpgsql().AddDbContext<ApiDbContext>(opt =>
    opt.UseNpgsql(builder.Configuration.GetConnectionString("WebApiDatabase")));

image

新增Models文件夹,创建BaseEntity泛型类

public abstract class BaseEntity
{
    public Guid Id { get; set; } = Guid.NewGuid();
    public DateTime UpdatedDate { get; set; } = DateTime.UtcNow;
    public string UpdatedBy { get; set; } = "";
    public string AddedBy { get; set; } = "";
    public DateTime AddedDate { get; set; } = DateTime.UtcNow;
    public int Status { get; set; } = 1;
}

创建模型

创建Team模型

public class Team : BaseEntity
{
    public Team()
    {
        Drivers = new HashSet<Driver>();
    }

    public string Name { get; set; } = "";
    public string Year { get; set; } = "";

    public virtual ICollection<Driver> Drivers { get; set; }
}

创建Driver模型

public class Driver: BaseEntity
{
    public Guid TeamId { get; set; }
    public string Name { get; set; } = "";
    public int RacingNumber { get; set; } 
    public virtual Team Team { get; set; }
    public virtual DriverMedia DriverMedia { get; set; }
}

创建DriverMedia模型

public class DriverMedia
{
    public int Id { get; set; }
    public byte[] Media { get; set; }
    public string Caption { get; set; }

    public Guid DriverId { get; set; }
    public Driver Driver { get; set; }
}

更新ApiDbContext中的内容

public class ApiDbContext : DbContext
{
    public virtual DbSet<Driver> Drivers { get; set; }
    public virtual DbSet<Team> Teams { get; set; }

    public ApiDbContext(DbContextOptions<ApiDbContext> options):base(options) {  }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        base.OnModelCreating(modelBuilder);


        modelBuilder.Entity<Driver>(entity =>
        {
            // One to Many relationship
            entity.HasOne(d => d.Team)
                .WithMany(p => p.Drivers)
                .HasForeignKey(d => d.TeamId)
                .OnDelete(DeleteBehavior.Restrict)
                .HasConstraintName("FK_Driver_Team");

            // One to One
            entity.HasOne(d => d.DriverMedia)
                .WithOne(i => i.Driver)
                .HasForeignKey<DriverMedia>(b => b.DriverId);
        });


    }
}

原文中的内容有bug,直接复制我的内容即可。

执行建表指令

dotnet ef migrations add "initial_migrations"
dotnet ef database update

运行结果展示

执行dotnet ef database update后,显示下图信息,则表示运行成功

image

数据库中也有新增的表
image

至此大功告成!

参考链接

https://dev.to/moe23/net-6-with-postgresql-576a

标签:Core,set,postgresql,string,get,ASP,Team,dotnet,public
From: https://www.cnblogs.com/leoych/p/17751535.html

相关文章

  • Asp-Net-Core开发笔记:EFCore统一实体和属性命名风格
    前言C#编码规范中,类和属性都是大写驼峰命名风格(PascalCase/UpperCamelCase),而在数据库中我们往往使用小写蛇形命名(snake_case),在默认情况下,EFCore会把原始的类名和属性名直接映射到数据库,这不符合数据库的命名规范。为了符合命名规范,而且也为了看起来更舒服,需要自己做命名转换......
  • 造轮子之asp.net core identity
    在前面我们完成了应用最基础的功能支持以及数据库配置,接下来就是我们的用户角色登录等功能了,在asp.netcore中原生Identity可以让我们快速完成这个功能的开发,在.NET8中,asp.netcoreidentity支持了WebApi的注册登录。这让我们在WebApi中可以更爽快的使用。安装包首先我们需要安......
  • PostgreSQL操作-psql基本命令
    一、建立数据库连接----------------接入PostgreSQL数据库:psql-hIP地址-p端口-U数据库名之后会要求输入数据库密码 二、访问数据库1、列举数据库:\l2、选择数据库:\c数据库名3、查看该某个库中的所有表:\dt4、切换数据库:\cinterface5、查看某个库中的某个表结构:\d表......
  • NetCore Ocelot 之 Authorization
    Ocelotsupportsclaimsbasedauthorizationwhichisrunpostauthentication.ThismeansifouhavearouteyouwanttoauthorizeyoucanaddthefollowingtoyouRouteconfiguration."RouteClaimsRequirement":{"client_role":......
  • Postgresql 截取字符串
    截取字符串一般用substring就够用了。对于有些长度不定的就没法用这个函数了,但还是有规律的,可以某个字符分割。  这时需要​​split_part​​函数,如:--url一共3个-,字符串被分成4部分,取最后一部分,那最后一个参数就是4selectsplit_part(fs.cdn_url,'-',4)fromfile......
  • vasp5.4.4+vaspkit安装
    vasp用gnu编译安装是最方便的,下面这个教程非常完整好用vasp-GNU注意看下方评论,第7步更改第33行处,需要删掉-L。vaspkit从sourceforge下载vaspkit打开官网后,右键download获取直链用wget下载即可。解压后运行./setup.sh最后vim~/.vaspkit更改赝势文件路径即可。赝势路径......
  • PostgreSQL添加角色,用户,更新密码,设置权限等配置操作
    创建用户:CREATEUSERqueryWITHPASSWORD'123456';授予用户权限:(1)给予权限:grantgrantselecton表名to用户名;(2)撤消权限:revokerevokeselecton表名from用户名;给用户授予全部表的权限:grantallonalltablesinschemapublictopublic;查看用户权限:select*fr......
  • Aspera Faspex RCE后渗透利用
    引言本文介绍了常规AsperaFaspex组件RCE后如何利用数据库并登录后台的简单后渗透利用,常见的RCENday例如:CVE-2022-47986。维持权限RCE通过反弹shell命令,获取ncshell,但此时shell并不是完全交互式的,并且维持权限不方便,不利用后续的利用,因此需要部署一个完全交互式shell木马,可......
  • NetCore Ocelot 之 Qos
    QosqualityofserviceOcelotsupportsoneQoscapabilityatthecurrenttime.YoucansetonaperRoutebasisifyouwanttouseacircuitbreakerwhenmakingrequeststoadownstreamservice.Thisusesanawesome.NETlibrarycalledPolly.Thefirstthi......
  • NetCore Ocelot 之 Load Balancer
    OcelotcanloadbalanceacrossavailabledownstreamservicesforeachRoute.ThismeansyoucanscaleyourdownstreamservicesandOcelotcanusethemeffectively.TheTypeofloadbalanceravailbleare:  LeastConnection -trackswhichservicearedeal......