1. 程式人生 > 實用技巧 >Sql Service Code First轉化為 Pgsql CodeFirst

Sql Service Code First轉化為 Pgsql CodeFirst

ef6轉化為efcore

1.ef6 sql service先修改為 ef6 pgsql

1.1 安裝 EntityFramework6.Npgsql 包

1.2 修改config 檔案中的連線串

新建一個pagsql的資料庫 JustTest

<connectionStrings>
    <add name="ZCParking/Statistics" connectionString="Server=10.168.*.*;port=5432;Database=JustTest;User Id=****;Password=****;" providerName="Npgsql" />
  </connectionStrings>

1.3 config 新增pgsql 相關配置

<entityFramework>
    <providers>
      <provider invariantName="Npgsql" type="Npgsql.NpgsqlServices, EntityFramework6.Npgsql" />
    </providers>
    <!-- setting the default connection factory is optional -->
    <defaultConnectionFactory type="Npgsql.NpgsqlConnectionFactory, EntityFramework6.Npgsql" />
  </entityFramework>
  <system.data>
    <DbProviderFactories>
      <add name="Npgsql Provider" invariant="Npgsql" description=".NET Framework Data Provider for PostgreSQL" type="Npgsql.NpgsqlFactory, Npgsql, Version=4.0.10.0, Culture=neutral, PublicKeyToken=5d8b90d52f46fda7" />
    </DbProviderFactories>
  </system.data>

1.4 刪除原先遷移和修復程式碼報錯

刪除時間型別的精度

[Column(TypeName = "datetime2")]

1.5 生成新遷移

注意點 :原先資料庫有guid 預設值的去除

原先時間戳型別的欄位去除

生成出遷移指令碼 到justtest庫執行

2.ef6升級到efcore 3.1

2.1 解除安裝 ef6包 增加efcore包 修復報錯

解除安裝

EntityFramework,EntityFramework6.Npgsql 包

新增

Npgsql.EntityFrameworkCore.PostgreSQL.NetTopologySuite

2.2 通過net core power tools 工具 反向生成 codefirst

選擇資料庫源為postgreSQL Database

填寫需要反向生成的資料庫 ip等資訊

勾選需要生成的表

勾選相應的配置

2.3 生成出的程式碼與之前的codefirst對比 並添加註釋

context檔案中 entity.Property(e => e.AmountActually).HasPrecision(18, 2);

可以替換成

預設生成出來的索引和外來鍵在各自的實體類中

可定義在context檔案中

支援注入

using Microsoft.EntityFrameworkCore;
using ZCParking.Entities.Statistics;

namespace Microsoft.Extensions.DependencyInjection
{
    public static class ServiceCollectionExtensions
    {
        public static IServiceCollection AddZCParkingEntitiesStatistics(this IServiceCollection services, string connectionString)
        {
            return services.AddDbContextPool<ZCParkingEntities_Statistics>(options =>
            {
                options.UseNpgsql(connectionString, x =>
                {
                    x.UseNetTopologySuite();
                });
            });
        }
    }
}

自己在轉化的過程中的步驟 記錄一下 僅供參考