-
Notifications
You must be signed in to change notification settings - Fork 26
Scaffolding not accurate #46
Description
The issue
When scaffolding an existing database, there are some issues with the generated classes.
- Columns marked as NOT NULL are generated as optional members.
- 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: