Skip to content
This repository was archived by the owner on May 9, 2020. It is now read-only.
This repository was archived by the owner on May 9, 2020. It is now read-only.

Scaffolding not accurate #46

@RonaldGHempel

Description

@RonaldGHempel

The issue

When scaffolding an existing database, there are some issues with the generated classes.

  1. Columns marked as NOT NULL are generated as optional members.
  2. Unique index spreading over serveral columns isn't marked as unique. See index RDB$19 down below, which is not marked as IsUnique()

Steps to reproduce

Table definition

id (D_ID) INTEGER Not Null
Stelle (D_ID) INTEGER Not Null
Art (D_ErlaeuterungsArt) SMALLINT Not Null
check (value >= 0)
Nummer1 (D_Nummer) SMALLINT Not Null
check (value >= -1)
Nummer2 (D_Nummer) SMALLINT Not Null
check (value >= -1)
Nummer3 SMALLINT Nullable
Txt1 (D_ID) INTEGER Not Null
Txt2 (D_ID) INTEGER Not Null
Txt3 INTEGER Nullable
Anzahl_Init (D_Anzahl_Stelle_Positiv) DECIMAL(10, 2) Not Null default 0
check (value >= 0)
Wegfall DATE Nullable
Ersatzplanstelle (D_JaNein) CHAR(1) Not Null
check (value in ('J','N'))
Status SMALLINT Not Null
CONSTRAINT FK_Erlaeuterungen_Stelle:
Foreign key (Stelle) References Stelle (id) On Delete Cascade
CONSTRAINT FK_Erlaeuterungen_TexteEbene1:
Foreign key (Txt1) References TexteEbene1 (id)
CONSTRAINT FK_Erlaeuterungen_TexteEbene2:
Foreign key (Txt2) References TexteEbene2 (id)
CONSTRAINT FK_Erlaeuterungen_TexteEbene3:
Foreign key (Txt3) References TexteEbene3 (id)
CONSTRAINT PK_Erlaeuterungen:
Primary key (id)
CONSTRAINT INTEG_37:
Unique key (Stelle, Art, Nummer1, Nummer2, Nummer3)

Triggers on Table Erlaeuterungen:
Erlaeuterungen_Before, Sequence: 0, Type: BEFORE INSERT OR UPDATE, Active

Generated model

classpublic void Configure(EntityTypeBuilder builder)
{
builder.ToTable("Erlaeuterungen ");

        builder.HasIndex(e => e.Art)
            .HasName("IDXErlaeuterungen_Art")
            .IsUnique();

        builder.HasIndex(e => e.Id)
            .HasName("PK_Erlaeuterungen");

        builder.HasIndex(e => e.Stelle)
            .HasName("FK_Erlaeuterungen_Stelle")
            .IsUnique();

        builder.HasIndex(e => e.Txt1)
            .HasName("FK_Erlaeuterungen_TexteEbene1")
            .IsUnique();

        builder.HasIndex(e => e.Txt2)
            .HasName("FK_Erlaeuterungen_TexteEbene2")
            .IsUnique();

        builder.HasIndex(e => e.Txt3)
            .HasName("FK_Erlaeuterungen_TexteEbene3")
            .IsUnique();

        builder.HasIndex(e => new { e.Art, e.Nummer1, e.Nummer2, e.Nummer3, e.Stelle })
            .HasName("RDB$19");

        builder.Property(e => e.Id).HasColumnName("id");

        builder.Property(e => e.AnzahlInit)
            .HasColumnName("Anzahl_Init")
            .HasColumnType("DECIMAL(10, 2)")
            .HasDefaultValueSql("default 0");

        builder.Property(e => e.Ersatzplanstelle).HasColumnType("CHAR(1) CHARACTER SET UTF8");

        builder.Property(e => e.Wegfall).HasColumnType("DATE");
    }:

Model information:

public partial class Erlaeuterungen
{
public int Id { get; set; }
public int? Stelle { get; set; }
public short? Art { get; set; }
public short? Nummer1 { get; set; }
public short? Nummer2 { get; set; }
public short? Nummer3 { get; set; }
public int? Txt1 { get; set; }
public int? Txt2 { get; set; }
public int? Txt3 { get; set; }
public decimal? AnzahlInit { get; set; }
public DateTime? Wegfall { get; set; }
public string Ersatzplanstelle { get; set; }
public short Status { get; set; }
}

Error details

See for example properties Stelle and Art, which are marked as optional within the model.
See index RDB$19 which is not marked as unique.

Further technical details

Firebird version: ISQL Version: WI-V3.0.3.32900 Firebird 3.0

Other details about my project setup:

Metadata

Metadata

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions