RS changes names of relations

Hello radzen team,
sometimes in the past in noticed that RS changes the names of relationships/references in the same tabel of the same type randomly.
actual example:

last infer.. only 2 changes. i have done nothing with the DispoArtikelPreisbestandteil table.
This is extremly annoying because all the source codes using now the wrong realtion data and because RS names two or more realtionships of the same type only with a number behind the reference... einheit, einheit1,einheit2 and so on instead of the relation fieldname with identifier before or behind (e.g "RefEkEinheitID" or "EkEinheitIdRef" something else).
Now i must search all sources and change Einheit to Einheit1 and Einheit1 to Einheit. thats bad!

And... this all happens without any errors because the ref names are there as before. But the data is now completly different and this leads to massive errors in the application!
The only thing we can do against this is to observe ALL changes in the model classes every time we infer the schema.

Can i do something against this? can you change the refence name generation (perhaps with an option "new ref names/old ref names" in infer options?
This all is completly unnecessary if RS scaffolding is done with tablewide unique refeference names.

kind regards
Thomas

i noticed there is another post about this:

forum

Hi @Thomas,

We were unable to reproduce this. Let us know if know what are the steps to reproduce such behavior.

I tested it with the last version in our git repository.
Code in this version (table DispoArtikelPreisbestandteil:

    public decimal? EKPreis
    {
      get;
      set;
    }
    public int? EKEinheitId
    {
      get;
      set;
    }
    public Einheit Einheit1 { get; set; }
    public decimal? VKPreis
    {
      get;
      set;
    }
    public int? VKEinheitId
    {
      get;
      set;
    }
    public Einheit Einheit { get; set; }

i notice that "Einheit1" comes before "Einheit". This seems to be wrong.

After inferring this version with RS:

    public decimal? EKPreis
    {
      get;
      set;
    }
    public int? EKEinheitId
    {
      get;
      set;
    }
    public Einheit Einheit { get; set; }
    public decimal? VKPreis
    {
      get;
      set;
    }
    public int? VKEinheitId
    {
      get;
      set;
    }
    public Einheit Einheit1 { get; set; }

the dbcontext has changed too:

btw: all model classes are now "marked as changed" in vs 2022 git view.

can you use this for further investigation? i can send the project i you wish.
or can look for other things.

Thomas

We need just the SQL schema.

i have sent it to info@radzen.com

Thomas

I've restored your database on my Microsoft SQL Server 2019, I've created new Blazor server app for .NET 7 using latest version of Radzen IDE, added new data source connected to this database and I've made 10 re-infers - no changes in the generated code:

What's your SQL Server version? Are you inferring by chance from different instances of your database hosted on different servers?

sql server version is
15.0.2101.7 2019.150.2101.7 [5021125 Security update for SQL Server 2019 GDR: February 14, 2023]

im using always the same sql server connection registered in RS. im always clicking "infer database"

i think the scaffolded model class "DispoArtikelPreisbestandteil.cs" is wrong in previous version and now after this inferring its correct. Dont know why it was wrong before.

The only thing i can think of is:
i have to development machines, the database is on the same server. its the only database for infering,
i infer sometimes on the other dev machine. but thats the only difference. both dev machines have same RS versions (i update RS always when i see the new version message).

i can have a look in git versions when the einheit/einheit1 in model class "DispoArtikelPreisbestandteil.cs" changes after inferring. i think i got this problem already in the past with the same table a few weeks ago.

Thomas

Some research on this problem:
i dont know how the reference class names will be generated to secure that they are always in the correct exsisting order!?

  • Alphabetically... no this wont work if anyone insert a new one between the existing ones

  • Database order of column returned for inferring... same problem

i searched in our git:
on 27.9.23 i defined the relations in the db and infer db.


the refs ekeinheitid = einheit and vkeinheitid=einheit1 is generated

then i made a change at the table and infer db later on 27.09.23:


Ekeinheitid changed from "int" to "int?"

on 30.09.23 i mage another change at the table.
deleted 1 relation and add 2 new colums and relations

    public int? EkZuschlagBezeichnungId
    {
      get;
      set;
    }
    public ZuschlagBezeichnung ZuschlagBezeichnung { get; set; }
    public int? VkZuschlagBezeichnungId
    {
      get;
      set;
    }
    public ZuschlagBezeichnung ZuschlagBezeichnung1 { get; set; }


and now the Einheit & einheit1 refs swaps:

i made several changes in the following days and the einheit and einheit1 swaps again and again (red lines when einheit -> einheit1 and einheit1 -> einheit). i didnt noticed that in development. only on 30.09.23 and today on 21.22.2023. But now i see it in the git change log

image

This is a major problem! its impossible to manually check if this happens. im doing much db changes all the time as our app is in moving development

as i can see it only happens to tables that are changed in some way so that tables that are not changed doesnt have the problem of swapped/modified ref names.

please help!

Thomas

btw... i change db with a vs database project. not in the database itsself.
And when i define new columns i insert the columns between existing columns.
i have a schema (most of the time :slight_smile: )
first column: unique identifier col (autoincrment int)
then normal colums
at the end all refs/relations

e.g:

CREATE TABLE [dbo].[DispoArtikelPreisBestandteil] (
	[DispoArtikelPreisBestandteilId] INT IDENTITY(1, 1) NOT NULL
	,[PreisBestandteilTypId] INT NOT NULL
	,[DispoOutlookArtikelId] INT NOT NULL
	,[EKPreis] DECIMAL(11, 2) NULL
	,[EKEinheitId] INT NULL
	,[VKPreis] DECIMAL(11, 2) NULL
	,[VKEinheitId] INT NULL
	,[GueltigVon] DATE NULL
	,[GueltigBis] DATE NULL
	,[Bemerkung] NVARCHAR(100) NULL
	,[TransportMitEigenenFahrzeugen] BIT DEFAULT(0) NOT NULL
	,[ArtikelId] INT NULL
	,[BefoerdererpartnerId] INT NULL
	,[ZuschlagBezeichnungId] INT NULL
	,[EntsorgungsnachweisId] INT NULL
	,PRIMARY KEY CLUSTERED ([DispoArtikelPreisBestandteilId] ASC)
	,CONSTRAINT [FKDispoArtikelPreisBestandteil_PreisBestandteilTyp] FOREIGN KEY ([PreisBestandteilTypId]) REFERENCES [PreisBestandteilTyp]([PreisBestandteilTypId])
	,CONSTRAINT [FKDispoArtikelPreisBestandteil_DispoOutlookArtikel] FOREIGN KEY ([DispoOutlookArtikelId]) REFERENCES [DispoOutlookArtikel]([DispoOutlookArtikelId])ON DELETE CASCADE
	,CONSTRAINT [FKPreisBestandteil_Befoerdererpartner] FOREIGN KEY ([BefoerdererpartnerId]) REFERENCES [Partner]([PartnerId])
	,CONSTRAINT [FKPreisBestandteil_Artikel] FOREIGN KEY ([ArtikelId]) REFERENCES [Artikel]([ArtikelId])
	,CONSTRAINT [FKPreisBestandteil_ZuschlagBezeichnung] FOREIGN KEY ([ZuschlagBezeichnungId]) REFERENCES [ZuschlagBezeichnung](ZuschlagBezeichnungId)
	,CONSTRAINT [FKPreisBestandteil_VkEinheit] FOREIGN KEY ([VKEinheitId]) REFERENCES [Einheit]([EinheitId])
	,CONSTRAINT [FKPreisBestandteil_EkEinheit] FOREIGN KEY ([EKEinheitId]) REFERENCES [Einheit]([EinheitId])
	,CONSTRAINT [FKPreisBestandteil_Entsorgungsnachweis] FOREIGN KEY ([EntsorgungsnachweisId]) REFERENCES [Entsorgungsnachweis]([EntsorgungsnachweisId])
	);

That means... i insert normal columns between the ref/navigation columns not at the end or somewhere else

Thomas

a question...
is it in some way... possible that i can give the ref classes a "custom name" if i wish? so that existing apps from all the RS users are not affected when they dont use this option.

other advantage for me is that while writing source code i can see which referenced data im working on.

i have plenty of tables with these einheit, einheit1, einheit2, einheit3 and others.. partner, partner1, partner2, ect. ect. names and while developing i often dont know on which data im working so that i must have a look in the model class what relation einheit1 or 2 or 3 is.

I've added new column to DispoArtikelPreisBestandteil table:

Checked the column during Radzen infer:

But the only changes I've got are:


I've made several infers to make sure that something will not change later however everything stayed the same.

You can add desired model in the application ignore list and change the name of some property to desired with [Column("ORIGINAL DATABASE NAME")] attribute.

I’ll continue to research on how to replicate this since we will unable to provide fix if we don’t know if our eventual change will fix anything at all.

i see you append the column to the table. thats not what i do. i inserted the column between other existing colums. depending on the method used by RS when generating the ref names this can make a difference.
i will try that tomorrow doing the things ive done with DispoArtikelPreisbestandteile and look at the generated DispoArtikelPreisbestandteile.cs model class.
i hope that brings some clarity on how the problem arises.

Thomas

This cannot be done unless you drop the entire table and recreate it from scratch - this however will cause huge problems with the data in the table. You will need to readd the data taking into account the new column.

Hi @enchev,
i use visual studio "sql server data tools" projekt (SSDT)
SSDT

I have tested that...
i inserted a column in DispoArtikelPreisbestandteil Table in the ssdt project

	,[VKEinheitId] INT NULL
	,[GueltigVon] DATE NULL
	,[GueltigBis] DATE NULL
	,[TestDatum] DATE NULL <-- NEW COLUMN
	,[Bemerkung] NVARCHAR(100) NULL
	,[TransportMitEigenenFahrzeugen] BIT DEFAULT(0) NOT NULL

The project compares the "project model" with a given database.
the differences are shown and a update database script is generated.
thats all in an SSDT project. very easy to use for database definition and organisation.

this is the generated script when i insert the new column "TestDatum":

/*
Bereitstellungsskript für trentdb_entw

Dieser Code wurde von einem Tool generiert.
Änderungen an dieser Datei führen möglicherweise zu falschem Verhalten und gehen verloren, falls
der Code neu generiert wird.
*/

GO
SET ANSI_NULLS, ANSI_PADDING, ANSI_WARNINGS, ARITHABORT, CONCAT_NULL_YIELDS_NULL, QUOTED_IDENTIFIER ON;

SET NUMERIC_ROUNDABORT OFF;


GO
:setvar DatabaseName "xxx"
:setvar DefaultFilePrefix "xxx"
:setvar DefaultDataPath "xxx"
:setvar DefaultLogPath "xxx"

GO
:on error exit
GO
/*
Überprüfen Sie den SQLCMD-Modus, und deaktivieren Sie die Skriptausführung, wenn der SQLCMD-Modus nicht unterstützt wird.
Um das Skript nach dem Aktivieren des SQLCMD-Modus erneut zu aktivieren, führen Sie folgenden Befehl aus:
SET NOEXEC OFF; 
*/
:setvar __IsSqlCmdEnabled "True"
GO
IF N'$(__IsSqlCmdEnabled)' NOT LIKE N'True'
    BEGIN
        PRINT N'Der SQLCMD-Modus muss aktiviert sein, damit dieses Skript erfolgreich ausgeführt werden kann.';
        SET NOEXEC ON;
    END


GO
USE [$(DatabaseName)];


GO
PRINT N'DEFAULT-Einschränkung "unbenannte Einschränkungen auf [dbo].[DispoArtikelPreisBestandteil]" wird gelöscht...';


GO
ALTER TABLE [dbo].[DispoArtikelPreisBestandteil] DROP CONSTRAINT [DF__tmp_ms_xx__Trans__5BAE681F];


GO
PRINT N'Fremdschlüssel "[dbo].[FKPreisBestandteilUploadInfoDispoArtikelPreisBestandteil]" wird gelöscht...';


GO
ALTER TABLE [dbo].[DispoArtikelPreisBestandteilUploadInfo] DROP CONSTRAINT [FKPreisBestandteilUploadInfoDispoArtikelPreisBestandteil];


GO
PRINT N'Fremdschlüssel "[dbo].[FKDispoArtikelPreisBestandteil_DispoOutlookArtikel]" wird gelöscht...';


GO
ALTER TABLE [dbo].[DispoArtikelPreisBestandteil] DROP CONSTRAINT [FKDispoArtikelPreisBestandteil_DispoOutlookArtikel];


GO
PRINT N'Fremdschlüssel "[dbo].[FKDispoArtikelPreisBestandteil_PreisBestandteilTyp]" wird gelöscht...';


GO
ALTER TABLE [dbo].[DispoArtikelPreisBestandteil] DROP CONSTRAINT [FKDispoArtikelPreisBestandteil_PreisBestandteilTyp];


GO
PRINT N'Fremdschlüssel "[dbo].[FKPreisBestandteil_EkEinheit]" wird gelöscht...';


GO
ALTER TABLE [dbo].[DispoArtikelPreisBestandteil] DROP CONSTRAINT [FKPreisBestandteil_EkEinheit];


GO
PRINT N'Fremdschlüssel "[dbo].[FKPreisBestandteil_Entsorgungsnachweis]" wird gelöscht...';


GO
ALTER TABLE [dbo].[DispoArtikelPreisBestandteil] DROP CONSTRAINT [FKPreisBestandteil_Entsorgungsnachweis];


GO
PRINT N'Fremdschlüssel "[dbo].[FKPreisBestandteil_VkEinheit]" wird gelöscht...';


GO
ALTER TABLE [dbo].[DispoArtikelPreisBestandteil] DROP CONSTRAINT [FKPreisBestandteil_VkEinheit];


GO
PRINT N'Fremdschlüssel "[dbo].[FKPreisBestandteil_ZuschlagBezeichnung]" wird gelöscht...';


GO
ALTER TABLE [dbo].[DispoArtikelPreisBestandteil] DROP CONSTRAINT [FKPreisBestandteil_ZuschlagBezeichnung];


GO
PRINT N'Fremdschlüssel "[dbo].[FKPreisBestandteil_Artikel]" wird gelöscht...';


GO
ALTER TABLE [dbo].[DispoArtikelPreisBestandteil] DROP CONSTRAINT [FKPreisBestandteil_Artikel];


GO
PRINT N'Fremdschlüssel "[dbo].[FKPreisBestandteil_Befoerdererpartner]" wird gelöscht...';


GO
ALTER TABLE [dbo].[DispoArtikelPreisBestandteil] DROP CONSTRAINT [FKPreisBestandteil_Befoerdererpartner];


GO
PRINT N'Das erneute Erstellen der Tabelle "[dbo].[DispoArtikelPreisBestandteil]" wird gestartet....';


GO
BEGIN TRANSACTION;

SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;

SET XACT_ABORT ON;

CREATE TABLE [dbo].[tmp_ms_xx_DispoArtikelPreisBestandteil] (
    [DispoArtikelPreisBestandteilId] INT             IDENTITY (1, 1) NOT NULL,
    [PreisBestandteilTypId]          INT             NOT NULL,
    [DispoOutlookArtikelId]          INT             NOT NULL,
    [EKPreis]                        DECIMAL (11, 2) NULL,
    [EKEinheitId]                    INT             NULL,
    [VKPreis]                        DECIMAL (11, 2) NULL,
    [VKEinheitId]                    INT             NULL,
    [GueltigVon]                     DATE            NULL,
    [GueltigBis]                     DATE            NULL,
    [TestDatum]                      DATE            NULL,
    [Bemerkung]                      NVARCHAR (100)  NULL,
    [TransportMitEigenenFahrzeugen]  BIT             DEFAULT (0) NOT NULL,
    [ArtikelId]                      INT             NULL,
    [BefoerdererpartnerId]           INT             NULL,
    [ZuschlagBezeichnungId]          INT             NULL,
    [EntsorgungsnachweisId]          INT             NULL,
    PRIMARY KEY CLUSTERED ([DispoArtikelPreisBestandteilId] ASC)
);

IF EXISTS (SELECT TOP 1 1 
           FROM   [dbo].[DispoArtikelPreisBestandteil])
    BEGIN
        SET IDENTITY_INSERT [dbo].[tmp_ms_xx_DispoArtikelPreisBestandteil] ON;
        INSERT INTO [dbo].[tmp_ms_xx_DispoArtikelPreisBestandteil] ([DispoArtikelPreisBestandteilId], [PreisBestandteilTypId], [DispoOutlookArtikelId], [EKPreis], [EKEinheitId], [VKPreis], [VKEinheitId], [GueltigVon], [GueltigBis], [Bemerkung], [TransportMitEigenenFahrzeugen], [ArtikelId], [BefoerdererpartnerId], [ZuschlagBezeichnungId], [EntsorgungsnachweisId])
        SELECT   [DispoArtikelPreisBestandteilId],
                 [PreisBestandteilTypId],
                 [DispoOutlookArtikelId],
                 [EKPreis],
                 [EKEinheitId],
                 [VKPreis],
                 [VKEinheitId],
                 [GueltigVon],
                 [GueltigBis],
                 [Bemerkung],
                 [TransportMitEigenenFahrzeugen],
                 [ArtikelId],
                 [BefoerdererpartnerId],
                 [ZuschlagBezeichnungId],
                 [EntsorgungsnachweisId]
        FROM     [dbo].[DispoArtikelPreisBestandteil]
        ORDER BY [DispoArtikelPreisBestandteilId] ASC;
        SET IDENTITY_INSERT [dbo].[tmp_ms_xx_DispoArtikelPreisBestandteil] OFF;
    END

DROP TABLE [dbo].[DispoArtikelPreisBestandteil];

EXECUTE sp_rename N'[dbo].[tmp_ms_xx_DispoArtikelPreisBestandteil]', N'DispoArtikelPreisBestandteil';

COMMIT TRANSACTION;

SET TRANSACTION ISOLATION LEVEL READ COMMITTED;


GO
PRINT N'Fremdschlüssel "[dbo].[FKPreisBestandteilUploadInfoDispoArtikelPreisBestandteil]" wird erstellt...';


GO
ALTER TABLE [dbo].[DispoArtikelPreisBestandteilUploadInfo] WITH NOCHECK
    ADD CONSTRAINT [FKPreisBestandteilUploadInfoDispoArtikelPreisBestandteil] FOREIGN KEY ([DispoArtikelPreisBestandteilId]) REFERENCES [dbo].[DispoArtikelPreisBestandteil] ([DispoArtikelPreisBestandteilId]) ON DELETE CASCADE;


GO
PRINT N'Fremdschlüssel "[dbo].[FKDispoArtikelPreisBestandteil_DispoOutlookArtikel]" wird erstellt...';


GO
ALTER TABLE [dbo].[DispoArtikelPreisBestandteil] WITH NOCHECK
    ADD CONSTRAINT [FKDispoArtikelPreisBestandteil_DispoOutlookArtikel] FOREIGN KEY ([DispoOutlookArtikelId]) REFERENCES [dbo].[DispoOutlookArtikel] ([DispoOutlookArtikelId]) ON DELETE CASCADE;


GO
PRINT N'Fremdschlüssel "[dbo].[FKDispoArtikelPreisBestandteil_PreisBestandteilTyp]" wird erstellt...';


GO
ALTER TABLE [dbo].[DispoArtikelPreisBestandteil] WITH NOCHECK
    ADD CONSTRAINT [FKDispoArtikelPreisBestandteil_PreisBestandteilTyp] FOREIGN KEY ([PreisBestandteilTypId]) REFERENCES [dbo].[PreisBestandteilTyp] ([PreisBestandteilTypId]);


GO
PRINT N'Fremdschlüssel "[dbo].[FKPreisBestandteil_EkEinheit]" wird erstellt...';


GO
ALTER TABLE [dbo].[DispoArtikelPreisBestandteil] WITH NOCHECK
    ADD CONSTRAINT [FKPreisBestandteil_EkEinheit] FOREIGN KEY ([EKEinheitId]) REFERENCES [dbo].[Einheit] ([EinheitId]);


GO
PRINT N'Fremdschlüssel "[dbo].[FKPreisBestandteil_Entsorgungsnachweis]" wird erstellt...';


GO
ALTER TABLE [dbo].[DispoArtikelPreisBestandteil] WITH NOCHECK
    ADD CONSTRAINT [FKPreisBestandteil_Entsorgungsnachweis] FOREIGN KEY ([EntsorgungsnachweisId]) REFERENCES [dbo].[Entsorgungsnachweis] ([EntsorgungsnachweisId]);


GO
PRINT N'Fremdschlüssel "[dbo].[FKPreisBestandteil_VkEinheit]" wird erstellt...';


GO
ALTER TABLE [dbo].[DispoArtikelPreisBestandteil] WITH NOCHECK
    ADD CONSTRAINT [FKPreisBestandteil_VkEinheit] FOREIGN KEY ([VKEinheitId]) REFERENCES [dbo].[Einheit] ([EinheitId]);


GO
PRINT N'Fremdschlüssel "[dbo].[FKPreisBestandteil_ZuschlagBezeichnung]" wird erstellt...';


GO
ALTER TABLE [dbo].[DispoArtikelPreisBestandteil] WITH NOCHECK
    ADD CONSTRAINT [FKPreisBestandteil_ZuschlagBezeichnung] FOREIGN KEY ([ZuschlagBezeichnungId]) REFERENCES [dbo].[ZuschlagBezeichnung] ([ZuschlagBezeichnungId]);


GO
PRINT N'Fremdschlüssel "[dbo].[FKPreisBestandteil_Artikel]" wird erstellt...';


GO
ALTER TABLE [dbo].[DispoArtikelPreisBestandteil] WITH NOCHECK
    ADD CONSTRAINT [FKPreisBestandteil_Artikel] FOREIGN KEY ([ArtikelId]) REFERENCES [dbo].[Artikel] ([ArtikelId]);


GO
PRINT N'Fremdschlüssel "[dbo].[FKPreisBestandteil_Befoerdererpartner]" wird erstellt...';


GO
ALTER TABLE [dbo].[DispoArtikelPreisBestandteil] WITH NOCHECK
    ADD CONSTRAINT [FKPreisBestandteil_Befoerdererpartner] FOREIGN KEY ([BefoerdererpartnerId]) REFERENCES [dbo].[Partner] ([PartnerId]);


GO
PRINT N'Vorhandene Daten werden auf neu erstellte Einschränkungen hin überprüft.';


GO
USE [$(DatabaseName)];


GO
ALTER TABLE [dbo].[DispoArtikelPreisBestandteilUploadInfo] WITH CHECK CHECK CONSTRAINT [FKPreisBestandteilUploadInfoDispoArtikelPreisBestandteil];

ALTER TABLE [dbo].[DispoArtikelPreisBestandteil] WITH CHECK CHECK CONSTRAINT [FKDispoArtikelPreisBestandteil_DispoOutlookArtikel];

ALTER TABLE [dbo].[DispoArtikelPreisBestandteil] WITH CHECK CHECK CONSTRAINT [FKDispoArtikelPreisBestandteil_PreisBestandteilTyp];

ALTER TABLE [dbo].[DispoArtikelPreisBestandteil] WITH CHECK CHECK CONSTRAINT [FKPreisBestandteil_EkEinheit];

ALTER TABLE [dbo].[DispoArtikelPreisBestandteil] WITH CHECK CHECK CONSTRAINT [FKPreisBestandteil_Entsorgungsnachweis];

ALTER TABLE [dbo].[DispoArtikelPreisBestandteil] WITH CHECK CHECK CONSTRAINT [FKPreisBestandteil_VkEinheit];

ALTER TABLE [dbo].[DispoArtikelPreisBestandteil] WITH CHECK CHECK CONSTRAINT [FKPreisBestandteil_ZuschlagBezeichnung];

ALTER TABLE [dbo].[DispoArtikelPreisBestandteil] WITH CHECK CHECK CONSTRAINT [FKPreisBestandteil_Artikel];

ALTER TABLE [dbo].[DispoArtikelPreisBestandteil] WITH CHECK CHECK CONSTRAINT [FKPreisBestandteil_Befoerdererpartner];


GO
PRINT N'Update abgeschlossen.';


GO

As you see the update script generates the table new and transfers the data from the "old" table to the "new" table and then deletes the old table.

Thomas

I never wrote a database update script myself.
the SSDT projects are very handy for such "disturbing things" :slight_smile:

And i can compare every project model with every database. doesnt matter how much the database differs from the project model.
I use it to define my dev database and then update the test database and then update the production database. All things done in a few minutes.

Thomas

OK. I’ll use SSDT to insert a column in the middle to test Radzen scaffold - not sure honestly why the position of the column is so important for you. Generating update scripts instead adding columns at the end looks like overkill to me.

Since I have only schema and no data, I've unchecked temporary "Prevent saving changes":

and I've inserted column right after keys of the table:

and although the position in the code of various FK definitions are changed after infer their names stayed same.

data source meta JSON:

Einheit model:

All changes:

I'm afraid that I'm not sure what else I need to do to reproduce changing of names after infer.

hello @enchev,
aarghh... this thing seems to be very complicated. i see that all works depending of what youve done to reproduce so far. Sometimes development drives me crazy :slight_smile:

There are no changes in the DispoArtikelPreisbestandteil.cs?

Hmmm.... i think i will get some version of the app before the DispoArtikelPreisbestandteil Einheit/Einheit1 swaps and try to reproduce that step by step.

i dont know if i find time today but i will do this as soon as possible.

Thanks!
Thomas

Sure. Its overkill. But its only one click and tattaa... updatescript ready for whatever changes are necessary. i have many changes in the database structure.
Its only time saving :slight_smile: