NetCore3.1 引入PostgerSql + DbFirst

十年河東,十年河西,莫欺少年窮

學無止境,精益求精

1、新建控制檯項目PostgreSQLApp,引入如下包

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>netcoreapp3.1</TargetFramework>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="3.1.32">
      <PrivateAssets>all</PrivateAssets>
      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
    </PackageReference>
    <PackageReference Include="Microsoft.Extensions.Configuration" Version="3.1.32" />
    <PackageReference Include="Microsoft.Extensions.Configuration.Binder" Version="3.1.32" />
    <PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="3.1.32" />
    <PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="3.1.32" />
    <PackageReference Include="Microsoft.Extensions.Hosting" Version="3.1.32" />
    <PackageReference Include="Microsoft.Extensions.Hosting.WindowsServices" Version="3.1.32" />
    <PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
    <PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="3.1.18" />
    <PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL.Design" Version="1.1.0" />
  </ItemGroup>

  <ItemGroup>
    <None Update="appsettings.json">
      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
    </None>
  </ItemGroup>

</Project>
View Code

2、打開PostgerSQL 新建test 數據庫 並先建兩張表

表的結構不重要

 3、打開程序包管理器控制檯,生成DbContext 及 Models

Scaffold-DbContext -Connection "User ID=postgres;Password=chen1234;Host=127.0.0.1;Port=5432;Database=test;Pooling=true;" -Provider Npgsql.EntityFrameworkCore.PostgreSQL -OutputDir Models -ContextDir Context -Context postgerSqlDbContext -force

4、添加配置文件appsettings.json,並設爲始終複製

{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft": "Warning",
      "Microsoft.Hosting.Lifetime": "Information"
    }
  },
  "AllowedHosts": "*", 
  "ConnectionStrings": {
    "postgerSqlDbContext": "User ID=postgres;Password=chen123456789;Host=127.0.0.1;Port=5432;Database=test;Pooling=true;"
  } 
}

5、初始化Program.cs

using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging; 
using Microsoft.Extensions.Options;
using PostgreSQLApp.Context;
using System;

namespace PostgreSQLApp
{
    class Program
    {
        static void Main(string[] args)
        {
            ConfigurationBuilder builder = new ConfigurationBuilder();
            builder.AddJsonFile("appsettings.json", true, true);
            var ConfigRoot = builder.Build();//根節點
            IServiceCollection Services = new ServiceCollection();
         
            Services.AddLogging(log => { log.AddConsole(); log.SetMinimumLevel(LogLevel.Information); });
            Services.AddScoped<UserService>();
            Services.AddDbContext<postgerSqlDbContext>(options => options.UseNpgsql(ConfigRoot.GetConnectionString("postgerSqlDbContext")), ServiceLifetime.Scoped) ;
            using (ServiceProvider provider = Services.BuildServiceProvider())
            {
                var UserServiceDto = provider.GetService<UserService>();
                UserServiceDto.AddData();
                // 
            }
            CreateHostBuilder(args).Run();
        }

        public static IHost CreateHostBuilder(string[] args)
        {
            var builder = Host.CreateDefaultBuilder(args)
                 .ConfigureServices((hostContext, services) =>
                 {
                     services.AddHostedService<MyWindowService>();
                 }).UseWindowsService();
            var host = builder.Build();

            return host;
        }
    }

}
View Code

 6、UserService.cs 插入/查詢數據

using PostgreSQLApp.Context;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace PostgreSQLApp
{
    public class UserService
    { 
        public void AddData()
        {
            using (var context = new postgerSqlDbContext())
            {
                List<PostgreSQLApp.Models.Sysuser> users = new List<Models.Sysuser>();
                List<PostgreSQLApp.Models.Userbuyrecord> buyrecords= new List<Models.Userbuyrecord>();
                for (int i = 0; i < 10000; i++)
                {
                    PostgreSQLApp.Models.Sysuser user = new Models.Sysuser()
                    {
                        Createtime = DateTime.Now,
                        Userid = Guid.NewGuid().ToString(),
                        Username = "陳大六" + i,
                        Usersex = i % 2
                    };
                    users.Add(user);
                    //
                    PostgreSQLApp.Models.Userbuyrecord buyrecord = new Models.Userbuyrecord()
                    {
                        Createtime = DateTime.Now,
                         Recordid = Guid.NewGuid().ToString(),
                    };
                    buyrecords.Add(buyrecord);
                }
                context.Sysuser.AddRange(users);
                context.Userbuyrecord.AddRange(buyrecords);
                context.SaveChanges();
                Console.WriteLine("插入成功");
            }
        }

        public List<PostgreSQLApp.Models.Userbuyrecord> SearchData()
        {
            using (var context = new postgerSqlDbContext())
            {
               return  context.Userbuyrecord.ToList(); 
            }
        }


    }
}
View Code

7、MyWindowService.cs 定時服務

using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Text;
using System.Threading;
using System.Threading.Tasks;

namespace PostgreSQLApp
{
    public class MyWindowService : BackgroundService
    {
        private readonly ILogger<MyWindowService> _logger;
        public MyWindowService(ILogger<MyWindowService> logger)
        {
            _logger = logger;

        }

        public override Task StartAsync(CancellationToken cancellationToken)
        {
            if (!cancellationToken.IsCancellationRequested)
            {

            }
            return base.StartAsync(cancellationToken);
        }
        /// <summary>
        ///  每一秒執行一次
        /// </summary>
        /// <param name="stoppingToken"></param>
        /// <returns></returns>
        protected override async Task ExecuteAsync(CancellationToken stoppingToken)
        {
            while (!stoppingToken.IsCancellationRequested)
            {
                //循環執行 每一小時執行一次
                var now = DateTime.Now;
                Console.WriteLine("ExecuteAsync執行結果:" + now);
                //var data = new UserService().SearchData();
                //Console.WriteLine(JsonConvert.SerializeObject(data));
                await Task.Delay(1000 * 60 * 60, stoppingToken);
            }
        }

        public override Task StopAsync(CancellationToken cancellationToken)
        {
            return base.StopAsync(cancellationToken);
        }

    }
}
View Code

以上便完成了netCore 引入PostgerSql

補充下sqlserver 的DbFirst

Scaffold-DbContext -Connection "Data Source=127.0.0.1;Initial Catalog=ChargeDBTest;Password=Ws1245689;User ID=sa;MultipleActiveResultSets=true;" -Provider Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models -ContextDir Context -Context swapDbContext -force

@天才臥龍的博客

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章