remove duplicate indices on pk and altk

This commit is contained in:
cuqmbr 2025-05-02 21:38:15 +03:00
parent 09f3a46edc
commit 201e6e7dfc
Signed by: cuqmbr
GPG Key ID: 0AA446880C766199
4 changed files with 668 additions and 77 deletions

View File

@ -11,32 +11,23 @@ public class BaseConfiguration<TEntity> : IEntityTypeConfiguration<TEntity>
{
builder
.HasKey(b => b.Id)
.HasName($"pk_{builder.Metadata.GetTableName()}");
.HasName($"pk_{builder.Metadata.GetTableName() ??
// Set primary key for inherited types using type name
// instead of mapped table name
builder.Metadata.ShortName().ToLower()}");
builder
.Property(b => b.Id)
.HasColumnName("id")
.HasColumnType("bigint")
.UseSequence(
$"{builder.Metadata.GetTableName()}_" +
$"{builder.Metadata.GetTableName() ??
// Set sequence for inherited types using type name
// instead of mapped table name
builder.Metadata.ShortName().ToLower()}_" +
$"{builder.Property(b => b.Id).Metadata.GetColumnName()}_" +
"sequence");
builder
.HasIndex(b => b.Id)
.HasDatabaseName(
"ix_" +
$"{builder.Metadata.GetTableName()}_" +
$"{builder.Property(b => b.Id).Metadata.GetColumnName()}")
.IsUnique();
builder
.HasAlternateKey(b => b.Guid)
.HasName(
"altk_" +
$"{builder.Metadata.GetTableName()}_" +
$"{builder.Property(b => b.Guid).Metadata.GetColumnName()}");
builder
.Property(b => b.Guid)
@ -45,11 +36,13 @@ public class BaseConfiguration<TEntity> : IEntityTypeConfiguration<TEntity>
.IsRequired(true);
builder
.HasIndex(b => b.Guid)
.HasDatabaseName(
"ix_" +
$"{builder.Metadata.GetTableName()}_" +
$"{builder.Property(b => b.Guid).Metadata.GetColumnName()}")
.IsUnique();
.HasAlternateKey(b => b.Guid)
.HasName(
"altk_" +
$"{builder.Metadata.GetTableName() ??
// Set alternate key for inherited types using type name
// instead of mapped table name
builder.Metadata.ShortName().ToLower()}_" +
$"{builder.Property(b => b.Guid).Metadata.GetColumnName()}");
}
}

View File

@ -0,0 +1,352 @@
// <auto-generated />
using System;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Migrations;
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
using cuqmbr.TravelGuide.Persistence.PostgreSql;
#nullable disable
namespace Persistence.PostgreSql.Migrations
{
[DbContext(typeof(PostgreSqlDbContext))]
[Migration("20250502183338_Remove_duplicate_indices_on_pk_and_altk")]
partial class Remove_duplicate_indices_on_pk_and_altk
{
/// <inheritdoc />
protected override void BuildTargetModel(ModelBuilder modelBuilder)
{
#pragma warning disable 612, 618
modelBuilder
.HasDefaultSchema("application")
.HasAnnotation("ProductVersion", "9.0.4")
.HasAnnotation("Relational:MaxIdentifierLength", 63);
NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder);
modelBuilder.HasSequence("addresses_id_sequence");
modelBuilder.HasSequence("cities_id_sequence");
modelBuilder.HasSequence("countries_id_sequence");
modelBuilder.HasSequence("regions_id_sequence");
modelBuilder.HasSequence("route_addresses_id_sequence");
modelBuilder.HasSequence("routes_id_sequence");
modelBuilder.Entity("cuqmbr.TravelGuide.Domain.Entities.Address", b =>
{
b.Property<long>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("bigint")
.HasColumnName("id")
.HasDefaultValueSql("nextval('application.addresses_id_sequence')");
NpgsqlPropertyBuilderExtensions.UseSequence(b.Property<long>("Id"), "addresses_id_sequence");
b.Property<long>("CityId")
.HasColumnType("bigint")
.HasColumnName("city_id");
b.Property<Guid>("Guid")
.HasColumnType("uuid")
.HasColumnName("uuid");
b.Property<double>("Latitude")
.HasColumnType("double precision");
b.Property<double>("Longitude")
.HasColumnType("double precision");
b.Property<string>("Name")
.IsRequired()
.HasColumnType("varchar(128)")
.HasColumnName("name");
b.Property<string>("VehicleType")
.IsRequired()
.HasColumnType("varchar(16)")
.HasColumnName("vehicle_type");
b.HasKey("Id")
.HasName("pk_addresses");
b.HasAlternateKey("Guid")
.HasName("altk_addresses_uuid");
b.HasIndex("CityId")
.HasDatabaseName("ix_addresses_city_id");
b.ToTable("addresses", "application", t =>
{
t.HasCheckConstraint("ck_addresses_vehicle_type", "vehicle_type IN ('bus', 'train', 'aircraft')");
});
});
modelBuilder.Entity("cuqmbr.TravelGuide.Domain.Entities.City", b =>
{
b.Property<long>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("bigint")
.HasColumnName("id")
.HasDefaultValueSql("nextval('application.cities_id_sequence')");
NpgsqlPropertyBuilderExtensions.UseSequence(b.Property<long>("Id"), "cities_id_sequence");
b.Property<Guid>("Guid")
.HasColumnType("uuid")
.HasColumnName("uuid");
b.Property<string>("Name")
.IsRequired()
.HasColumnType("varchar(64)")
.HasColumnName("name");
b.Property<long>("RegionId")
.HasColumnType("bigint")
.HasColumnName("region_id");
b.HasKey("Id")
.HasName("pk_cities");
b.HasAlternateKey("Guid")
.HasName("altk_cities_uuid");
b.HasIndex("RegionId")
.HasDatabaseName("ix_cities_region_id");
b.ToTable("cities", "application");
});
modelBuilder.Entity("cuqmbr.TravelGuide.Domain.Entities.Country", b =>
{
b.Property<long>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("bigint")
.HasColumnName("id")
.HasDefaultValueSql("nextval('application.countries_id_sequence')");
NpgsqlPropertyBuilderExtensions.UseSequence(b.Property<long>("Id"), "countries_id_sequence");
b.Property<Guid>("Guid")
.HasColumnType("uuid")
.HasColumnName("uuid");
b.Property<string>("Name")
.IsRequired()
.HasColumnType("varchar(64)")
.HasColumnName("name");
b.HasKey("Id")
.HasName("pk_countries");
b.HasAlternateKey("Guid")
.HasName("altk_countries_uuid");
b.ToTable("countries", "application");
});
modelBuilder.Entity("cuqmbr.TravelGuide.Domain.Entities.Region", b =>
{
b.Property<long>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("bigint")
.HasColumnName("id")
.HasDefaultValueSql("nextval('application.regions_id_sequence')");
NpgsqlPropertyBuilderExtensions.UseSequence(b.Property<long>("Id"), "regions_id_sequence");
b.Property<long>("CountryId")
.HasColumnType("bigint")
.HasColumnName("country_id");
b.Property<Guid>("Guid")
.HasColumnType("uuid")
.HasColumnName("uuid");
b.Property<string>("Name")
.IsRequired()
.HasColumnType("varchar(64)")
.HasColumnName("name");
b.HasKey("Id")
.HasName("pk_regions");
b.HasAlternateKey("Guid")
.HasName("altk_regions_uuid");
b.HasIndex("CountryId")
.HasDatabaseName("ix_regions_country_id");
b.ToTable("regions", "application");
});
modelBuilder.Entity("cuqmbr.TravelGuide.Domain.Entities.Route", b =>
{
b.Property<long>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("bigint")
.HasColumnName("id")
.HasDefaultValueSql("nextval('application.routes_id_sequence')");
NpgsqlPropertyBuilderExtensions.UseSequence(b.Property<long>("Id"), "routes_id_sequence");
b.Property<Guid>("Guid")
.HasColumnType("uuid")
.HasColumnName("uuid");
b.Property<string>("Name")
.IsRequired()
.HasColumnType("varchar(64)")
.HasColumnName("name");
b.Property<string>("VehicleType")
.IsRequired()
.HasColumnType("varchar(16)")
.HasColumnName("vehicle_type");
b.HasKey("Id")
.HasName("pk_routes");
b.HasAlternateKey("Guid")
.HasName("altk_routes_uuid");
b.ToTable("routes", "application", t =>
{
t.HasCheckConstraint("ck_routes_vehicle_type", "vehicle_type IN ('bus', 'train', 'aircraft')");
});
});
modelBuilder.Entity("cuqmbr.TravelGuide.Domain.Entities.RouteAddress", b =>
{
b.Property<long>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("bigint")
.HasColumnName("id")
.HasDefaultValueSql("nextval('application.route_addresses_id_sequence')");
NpgsqlPropertyBuilderExtensions.UseSequence(b.Property<long>("Id"), "route_addresses_id_sequence");
b.Property<long>("AddressId")
.HasColumnType("bigint")
.HasColumnName("address_id");
b.Property<Guid>("Guid")
.HasColumnType("uuid")
.HasColumnName("uuid");
b.Property<short>("Order")
.HasColumnType("smallint")
.HasColumnName("order");
b.Property<long>("RouteId")
.HasColumnType("bigint")
.HasColumnName("route_id");
b.HasKey("Id")
.HasName("pk_route_addresses");
b.HasAlternateKey("Guid")
.HasName("altk_route_addresses_uuid");
b.HasAlternateKey("AddressId", "RouteId", "Order")
.HasName("altk_route_addresses_address_id_route_id_order");
b.HasIndex("AddressId")
.HasDatabaseName("ix_route_addresses_address_id");
b.HasIndex("RouteId")
.HasDatabaseName("ix_route_addresses_route_id");
b.ToTable("route_addresses", "application");
});
modelBuilder.Entity("cuqmbr.TravelGuide.Domain.Entities.Address", b =>
{
b.HasOne("cuqmbr.TravelGuide.Domain.Entities.City", "City")
.WithMany("Addresses")
.HasForeignKey("CityId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired()
.HasConstraintName("fk_addresses_city_id");
b.Navigation("City");
});
modelBuilder.Entity("cuqmbr.TravelGuide.Domain.Entities.City", b =>
{
b.HasOne("cuqmbr.TravelGuide.Domain.Entities.Region", "Region")
.WithMany("Cities")
.HasForeignKey("RegionId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired()
.HasConstraintName("fk_cities_region_id");
b.Navigation("Region");
});
modelBuilder.Entity("cuqmbr.TravelGuide.Domain.Entities.Region", b =>
{
b.HasOne("cuqmbr.TravelGuide.Domain.Entities.Country", "Country")
.WithMany("Regions")
.HasForeignKey("CountryId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired()
.HasConstraintName("fk_regions_country_id");
b.Navigation("Country");
});
modelBuilder.Entity("cuqmbr.TravelGuide.Domain.Entities.RouteAddress", b =>
{
b.HasOne("cuqmbr.TravelGuide.Domain.Entities.Address", "Address")
.WithMany("AddressRoutes")
.HasForeignKey("AddressId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired()
.HasConstraintName("fk_route_addresses_address_id");
b.HasOne("cuqmbr.TravelGuide.Domain.Entities.Route", "Route")
.WithMany("RouteAddresses")
.HasForeignKey("RouteId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired()
.HasConstraintName("fk_route_addresses_route_id");
b.Navigation("Address");
b.Navigation("Route");
});
modelBuilder.Entity("cuqmbr.TravelGuide.Domain.Entities.Address", b =>
{
b.Navigation("AddressRoutes");
});
modelBuilder.Entity("cuqmbr.TravelGuide.Domain.Entities.City", b =>
{
b.Navigation("Addresses");
});
modelBuilder.Entity("cuqmbr.TravelGuide.Domain.Entities.Country", b =>
{
b.Navigation("Regions");
});
modelBuilder.Entity("cuqmbr.TravelGuide.Domain.Entities.Region", b =>
{
b.Navigation("Cities");
});
modelBuilder.Entity("cuqmbr.TravelGuide.Domain.Entities.Route", b =>
{
b.Navigation("RouteAddresses");
});
#pragma warning restore 612, 618
}
}
}

View File

@ -0,0 +1,294 @@
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
namespace Persistence.PostgreSql.Migrations
{
/// <inheritdoc />
public partial class Remove_duplicate_indices_on_pk_and_altk : Migration
{
/// <inheritdoc />
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropUniqueConstraint(
name: "altk_routes_Guid",
schema: "application",
table: "routes");
migrationBuilder.DropIndex(
name: "ix_routes_id",
schema: "application",
table: "routes");
migrationBuilder.DropIndex(
name: "ix_routes_uuid",
schema: "application",
table: "routes");
migrationBuilder.DropUniqueConstraint(
name: "altk_route_addresses_Guid",
schema: "application",
table: "route_addresses");
migrationBuilder.DropIndex(
name: "ix_route_addresses_id",
schema: "application",
table: "route_addresses");
migrationBuilder.DropIndex(
name: "ix_route_addresses_uuid",
schema: "application",
table: "route_addresses");
migrationBuilder.DropUniqueConstraint(
name: "altk_regions_Guid",
schema: "application",
table: "regions");
migrationBuilder.DropIndex(
name: "ix_regions_id",
schema: "application",
table: "regions");
migrationBuilder.DropIndex(
name: "ix_regions_uuid",
schema: "application",
table: "regions");
migrationBuilder.DropUniqueConstraint(
name: "altk_countries_Guid",
schema: "application",
table: "countries");
migrationBuilder.DropIndex(
name: "ix_countries_id",
schema: "application",
table: "countries");
migrationBuilder.DropIndex(
name: "ix_countries_uuid",
schema: "application",
table: "countries");
migrationBuilder.DropUniqueConstraint(
name: "altk_cities_Guid",
schema: "application",
table: "cities");
migrationBuilder.DropIndex(
name: "ix_cities_id",
schema: "application",
table: "cities");
migrationBuilder.DropIndex(
name: "ix_cities_uuid",
schema: "application",
table: "cities");
migrationBuilder.DropUniqueConstraint(
name: "altk_addresses_Guid",
schema: "application",
table: "addresses");
migrationBuilder.DropIndex(
name: "ix_addresses_id",
schema: "application",
table: "addresses");
migrationBuilder.DropIndex(
name: "ix_addresses_uuid",
schema: "application",
table: "addresses");
migrationBuilder.AddUniqueConstraint(
name: "altk_routes_uuid",
schema: "application",
table: "routes",
column: "uuid");
migrationBuilder.AddUniqueConstraint(
name: "altk_route_addresses_uuid",
schema: "application",
table: "route_addresses",
column: "uuid");
migrationBuilder.AddUniqueConstraint(
name: "altk_regions_uuid",
schema: "application",
table: "regions",
column: "uuid");
migrationBuilder.AddUniqueConstraint(
name: "altk_countries_uuid",
schema: "application",
table: "countries",
column: "uuid");
migrationBuilder.AddUniqueConstraint(
name: "altk_cities_uuid",
schema: "application",
table: "cities",
column: "uuid");
migrationBuilder.AddUniqueConstraint(
name: "altk_addresses_uuid",
schema: "application",
table: "addresses",
column: "uuid");
}
/// <inheritdoc />
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropUniqueConstraint(
name: "altk_routes_uuid",
schema: "application",
table: "routes");
migrationBuilder.DropUniqueConstraint(
name: "altk_route_addresses_uuid",
schema: "application",
table: "route_addresses");
migrationBuilder.DropUniqueConstraint(
name: "altk_regions_uuid",
schema: "application",
table: "regions");
migrationBuilder.DropUniqueConstraint(
name: "altk_countries_uuid",
schema: "application",
table: "countries");
migrationBuilder.DropUniqueConstraint(
name: "altk_cities_uuid",
schema: "application",
table: "cities");
migrationBuilder.DropUniqueConstraint(
name: "altk_addresses_uuid",
schema: "application",
table: "addresses");
migrationBuilder.AddUniqueConstraint(
name: "altk_routes_Guid",
schema: "application",
table: "routes",
column: "uuid");
migrationBuilder.AddUniqueConstraint(
name: "altk_route_addresses_Guid",
schema: "application",
table: "route_addresses",
column: "uuid");
migrationBuilder.AddUniqueConstraint(
name: "altk_regions_Guid",
schema: "application",
table: "regions",
column: "uuid");
migrationBuilder.AddUniqueConstraint(
name: "altk_countries_Guid",
schema: "application",
table: "countries",
column: "uuid");
migrationBuilder.AddUniqueConstraint(
name: "altk_cities_Guid",
schema: "application",
table: "cities",
column: "uuid");
migrationBuilder.AddUniqueConstraint(
name: "altk_addresses_Guid",
schema: "application",
table: "addresses",
column: "uuid");
migrationBuilder.CreateIndex(
name: "ix_routes_id",
schema: "application",
table: "routes",
column: "id",
unique: true);
migrationBuilder.CreateIndex(
name: "ix_routes_uuid",
schema: "application",
table: "routes",
column: "uuid",
unique: true);
migrationBuilder.CreateIndex(
name: "ix_route_addresses_id",
schema: "application",
table: "route_addresses",
column: "id",
unique: true);
migrationBuilder.CreateIndex(
name: "ix_route_addresses_uuid",
schema: "application",
table: "route_addresses",
column: "uuid",
unique: true);
migrationBuilder.CreateIndex(
name: "ix_regions_id",
schema: "application",
table: "regions",
column: "id",
unique: true);
migrationBuilder.CreateIndex(
name: "ix_regions_uuid",
schema: "application",
table: "regions",
column: "uuid",
unique: true);
migrationBuilder.CreateIndex(
name: "ix_countries_id",
schema: "application",
table: "countries",
column: "id",
unique: true);
migrationBuilder.CreateIndex(
name: "ix_countries_uuid",
schema: "application",
table: "countries",
column: "uuid",
unique: true);
migrationBuilder.CreateIndex(
name: "ix_cities_id",
schema: "application",
table: "cities",
column: "id",
unique: true);
migrationBuilder.CreateIndex(
name: "ix_cities_uuid",
schema: "application",
table: "cities",
column: "uuid",
unique: true);
migrationBuilder.CreateIndex(
name: "ix_addresses_id",
schema: "application",
table: "addresses",
column: "id",
unique: true);
migrationBuilder.CreateIndex(
name: "ix_addresses_uuid",
schema: "application",
table: "addresses",
column: "uuid",
unique: true);
}
}
}

View File

@ -73,19 +73,11 @@ namespace Persistence.PostgreSql.Migrations
.HasName("pk_addresses");
b.HasAlternateKey("Guid")
.HasName("altk_addresses_Guid");
.HasName("altk_addresses_uuid");
b.HasIndex("CityId")
.HasDatabaseName("ix_addresses_city_id");
b.HasIndex("Guid")
.IsUnique()
.HasDatabaseName("ix_addresses_uuid");
b.HasIndex("Id")
.IsUnique()
.HasDatabaseName("ix_addresses_id");
b.ToTable("addresses", "application", t =>
{
t.HasCheckConstraint("ck_addresses_vehicle_type", "vehicle_type IN ('bus', 'train', 'aircraft')");
@ -119,15 +111,7 @@ namespace Persistence.PostgreSql.Migrations
.HasName("pk_cities");
b.HasAlternateKey("Guid")
.HasName("altk_cities_Guid");
b.HasIndex("Guid")
.IsUnique()
.HasDatabaseName("ix_cities_uuid");
b.HasIndex("Id")
.IsUnique()
.HasDatabaseName("ix_cities_id");
.HasName("altk_cities_uuid");
b.HasIndex("RegionId")
.HasDatabaseName("ix_cities_region_id");
@ -158,15 +142,7 @@ namespace Persistence.PostgreSql.Migrations
.HasName("pk_countries");
b.HasAlternateKey("Guid")
.HasName("altk_countries_Guid");
b.HasIndex("Guid")
.IsUnique()
.HasDatabaseName("ix_countries_uuid");
b.HasIndex("Id")
.IsUnique()
.HasDatabaseName("ix_countries_id");
.HasName("altk_countries_uuid");
b.ToTable("countries", "application");
});
@ -198,19 +174,11 @@ namespace Persistence.PostgreSql.Migrations
.HasName("pk_regions");
b.HasAlternateKey("Guid")
.HasName("altk_regions_Guid");
.HasName("altk_regions_uuid");
b.HasIndex("CountryId")
.HasDatabaseName("ix_regions_country_id");
b.HasIndex("Guid")
.IsUnique()
.HasDatabaseName("ix_regions_uuid");
b.HasIndex("Id")
.IsUnique()
.HasDatabaseName("ix_regions_id");
b.ToTable("regions", "application");
});
@ -242,15 +210,7 @@ namespace Persistence.PostgreSql.Migrations
.HasName("pk_routes");
b.HasAlternateKey("Guid")
.HasName("altk_routes_Guid");
b.HasIndex("Guid")
.IsUnique()
.HasDatabaseName("ix_routes_uuid");
b.HasIndex("Id")
.IsUnique()
.HasDatabaseName("ix_routes_id");
.HasName("altk_routes_uuid");
b.ToTable("routes", "application", t =>
{
@ -288,7 +248,7 @@ namespace Persistence.PostgreSql.Migrations
.HasName("pk_route_addresses");
b.HasAlternateKey("Guid")
.HasName("altk_route_addresses_Guid");
.HasName("altk_route_addresses_uuid");
b.HasAlternateKey("AddressId", "RouteId", "Order")
.HasName("altk_route_addresses_address_id_route_id_order");
@ -296,14 +256,6 @@ namespace Persistence.PostgreSql.Migrations
b.HasIndex("AddressId")
.HasDatabaseName("ix_route_addresses_address_id");
b.HasIndex("Guid")
.IsUnique()
.HasDatabaseName("ix_route_addresses_uuid");
b.HasIndex("Id")
.IsUnique()
.HasDatabaseName("ix_route_addresses_id");
b.HasIndex("RouteId")
.HasDatabaseName("ix_route_addresses_route_id");