Entity is apparently not part of the model (but it is!)

Hello!

Aurelius protests that one of the tables either doesn't have the entity attribute (which it does) or is not part of the model (which as far as I can tell it is).

The general schema of the class is this:

[Entity]
  [Table('PETPERSONALE')]
  [Id('FID', TIdGenerator.IdentityOrSequence)]
  TPETPERSONALE = class( TBFiveModelDataLogBase )
  private
    [Column('ID', [TColumnProp.Required, TColumnProp.NoInsert, TColumnProp.NoUpdate])]
    FID: Integer;

    [Column('MATRICOLA', [TColumnProp.Required], 50)]
    FMATRICOLA: string;

    [Column('ID_CMTSTATI', [])]
    FID_CMTSTATI: Nullable<Integer>;

    [Column('EMAIL', [], 255)]
    FEMAIL: Nullable<string>;

    [Column('TELEFONO', [], 50)]
    FTELEFONO: Nullable<string>;

    [Column('DATA_INIZIO', [])]
    FDATA_INIZIO: Nullable<TDateTime>;

    [Column('DATA_FINE', [])]
    FDATA_FINE: Nullable<TDateTime>;

    [Column('ID_PIANO', [])]
    FID_PIANO: Nullable<Integer>;

    [Column('ESCLUDI_INCARICO', [], 1)]
    FESCLUDI_INCARICO: Nullable<string>;

    [Column('SMART_WORKING', [], 1)]
    FSMART_WORKING: Nullable<string>;

    [Column('INSERIMENTO_MANUALE', [], 1)]
    FINSERIMENTO_MANUALE: Nullable<string>;

    [Column('CID', [], 8)]
    FCID: Nullable<string>;

    [Column('RESPONSABILE', [], 1)]
    FRESPONSABILE: Nullable<string>;

    [Column('GRADO', [], 20)]
    FGRADO: Nullable<string>;

    [Column('GENERA_INCARICO_FLUSSO', [], 1)]
    FGENERA_INCARICO_FLUSSO: Nullable<string>;

    [Column('DATA_FINE_ESCLUDI_INCARICO', [])]
    FDATA_FINE_ESCLUDI_INCARICO: Nullable<TDateTime>;

    [Column('NOTE', [], 1000)]
    FNOTE: Nullable<string>;

//    [Association([TAssociationProp.Lazy], CascadeTypeAll - [TCascadeType.Remove])]
//    [JoinColumn('ID_CMTSITI', [], 'ID_CMTOGGETTI')]
//    FID_CMTSITI: Proxy<TCMTSITI>;
//
    [Association([TAssociationProp.Lazy], CascadeTypeAll - [TCascadeType.Remove])]
    [JoinColumn('ID_CMTSOCIETA', [], 'ID')]
    FID_CMTSOCIETA: Proxy<TCMTSOCIETA>;
//
//    [Association([TAssociationProp.Lazy], CascadeTypeAll - [TCascadeType.Remove])]
//    [JoinColumn('ID_CMTUNITAORGANIZZATIVE', [], 'ID')]
//    FID_CMTUNITAORGANIZZATIVE: Proxy<TCMTOGGETTI>;

    [Association([TAssociationProp.Lazy, TAssociationProp.Required], CascadeTypeAll - [TCascadeType.Remove])]
    [JoinColumn('ID_PETANAGRAFICA', [TColumnProp.Required], 'ID')]
    FID_PETANAGRAFICA: Proxy<TPETANAGRAFICA>;
//    function GetID_CMTSITI: TCMTSITI;
//    procedure SetID_CMTSITI(const Value: TCMTSITI);
    function GetID_CMTSOCIETA: TCMTSOCIETA;
    procedure SetID_CMTSOCIETA(const Value: TCMTSOCIETA);
//    function GetID_CMTUNITAORGANIZZATIVE: TCMTOGGETTI;
//    procedure SetID_CMTUNITAORGANIZZATIVE(const Value: TCMTOGGETTI);
    function GetID_PETANAGRAFICA: TPETANAGRAFICA;
    procedure SetID_PETANAGRAFICA(const Value: TPETANAGRAFICA);
  public
    property ID: Integer read FID write FID;
    property MATRICOLA: string read FMATRICOLA write FMATRICOLA;
    property ID_CMTSTATI: Nullable<Integer> read FID_CMTSTATI write FID_CMTSTATI;
    property EMAIL: Nullable<string> read FEMAIL write FEMAIL;
    property TELEFONO: Nullable<string> read FTELEFONO write FTELEFONO;
    property DATA_INIZIO: Nullable<TDateTime> read FDATA_INIZIO write FDATA_INIZIO;
    property DATA_FINE: Nullable<TDateTime> read FDATA_FINE write FDATA_FINE;
    property ID_PIANO: Nullable<Integer> read FID_PIANO write FID_PIANO;
    property ESCLUDI_INCARICO: Nullable<string> read FESCLUDI_INCARICO write FESCLUDI_INCARICO;
    property SMART_WORKING: Nullable<string> read FSMART_WORKING write FSMART_WORKING;
    property INSERIMENTO_MANUALE: Nullable<string> read FINSERIMENTO_MANUALE write FINSERIMENTO_MANUALE;
    property CID: Nullable<string> read FCID write FCID;
    property RESPONSABILE: Nullable<string> read FRESPONSABILE write FRESPONSABILE;
    property GRADO: Nullable<string> read FGRADO write FGRADO;
    property GENERA_INCARICO_FLUSSO: Nullable<string> read FGENERA_INCARICO_FLUSSO write FGENERA_INCARICO_FLUSSO;
    property DATA_FINE_ESCLUDI_INCARICO: Nullable<TDateTime> read FDATA_FINE_ESCLUDI_INCARICO write FDATA_FINE_ESCLUDI_INCARICO;
    property NOTE: Nullable<string> read FNOTE write FNOTE;
//    property ID_CMTSITI: TCMTSITI read GetID_CMTSITI write SetID_CMTSITI;
    property ID_CMTSOCIETA: TCMTSOCIETA read GetID_CMTSOCIETA write SetID_CMTSOCIETA;
//    property ID_CMTUNITAORGANIZZATIVE: TCMTOGGETTI read GetID_CMTUNITAORGANIZZATIVE write SetID_CMTUNITAORGANIZZATIVE;
    property ID_PETANAGRAFICA: TPETANAGRAFICA read GetID_PETANAGRAFICA write SetID_PETANAGRAFICA;
  end;

Some properties are commented on purpose because TMS Data Modeler refuses to map certain classes and we're trying to get a minimum set working as part of our trial to see if Aurelius can come in and substitute our insane amount of SQL.
In particular, this class is referenced here:

[Entity]
  [Table('SSTPERSONALE_VISITE')]
  [Id('FID', TIdGenerator.IdentityOrSequence)]
  TSSTPERSONALE_VISITE = class( TBFiveModelDataLogBase )
  private
    [Column('ID', [TColumnProp.Required, TColumnProp.NoInsert, TColumnProp.NoUpdate])]
    FID: Integer;

    [Column('ID_CMTSTATI', [TColumnProp.Required])]
    FID_CMTSTATI: Integer;

    [Column('ID_SSTVISITE', [])]
    FID_SSTVISITE: Nullable<Integer>;

    [Column('DATA_PIANIFICATA', [TColumnProp.Required])]
    FDATA_PIANIFICATA: TDateTime;

    [Column('DATA_CONCORDATA', [])]
    FDATA_CONCORDATA: Nullable<TDateTime>;

    [Column('ORA_VISITA', [], 5)]
    FORA_VISITA: Nullable<string>;

    [Column('DATA_EFFETTIVA', [])]
    FDATA_EFFETTIVA: Nullable<TDateTime>;

    [Column('PERIODICITA', [])]
    FPERIODICITA: Nullable<Integer>;

    [Column('DATA_VALIDITA', [])]
    FDATA_VALIDITA: Nullable<TDateTime>;

    [Column('FORZA_DATA_VALIDITA', [], 1)]
    FFORZA_DATA_VALIDITA: Nullable<string>;

    [Column('LUOGOVISITA', [], 250)]
    FLUOGOVISITA: Nullable<string>;

    [Column('ID_SSTTIPIRICHIEDENTE', [])]
    FID_SSTTIPIRICHIEDENTE: Nullable<Integer>;

    [Column('ID_SSTTIPOLOGIEVISITA', [])]
    FID_SSTTIPOLOGIEVISITA: Nullable<Integer>;

    [Column('NOTE', [], 1000)]
    FNOTE: Nullable<string>;

    [Column('ESITO_ACCERTAMENTO', [], 1)]
    FESITO_ACCERTAMENTO: Nullable<string>;

    [Column('PIANIFICAZIONEMANUALE', [], 1)]
    FPIANIFICAZIONEMANUALE: Nullable<string>;

    [Column('ID_GRUPPOOMOGENEO', [])]
    FID_GRUPPOOMOGENEO: Nullable<Integer>;

    [Column('ID_MANSIONE', [])]
    FID_MANSIONE: Nullable<Integer>;

    [Column('ID_STRUTTURAORGANIZZATIVA', [])]
    FID_STRUTTURAORGANIZZATIVA: Nullable<Integer>;

    [Column('ID_SSTAMBULATORI', [])]
    FID_SSTAMBULATORI: Nullable<Integer>;

    [Column('CONFERMACONVOCAZIONE', [], 1)]
    FCONFERMACONVOCAZIONE: Nullable<string>;

    [Column('ORASUGGERITA_DA', [])]
    FORASUGGERITA_DA: Nullable<TDateTime>;

    [Column('ORASUGGERITA_A', [])]
    FORASUGGERITA_A: Nullable<TDateTime>;

    [Column('COMMENTOUTENTE', [], 100)]
    FCOMMENTOUTENTE: Nullable<string>;

    [Column('NOTE_MEDICO', [TColumnProp.Lazy])]
    [DBTypeMemo]
    FNOTE_MEDICO: TBlob;

    [Column('PRESCRIZIONI_NON_STANDARD', [TColumnProp.Lazy])]
    [DBTypeMemo]
    FPRESCRIZIONI_NON_STANDARD: TBlob;

    [Column('ID_SSTESPOSIZIONE', [])]
    FID_SSTESPOSIZIONE: Nullable<Integer>;

    [Column('GRUPPIOMOGENEI', [TColumnProp.Lazy])]
    [DBTypeMemo]
    FGRUPPIOMOGENEI: TBlob;

    [Column('DATA_RICHIESTA', [])]
    FDATA_RICHIESTA: Nullable<TDateTime>;

    [Column('MOTIVAZIONE_VISITA', [], 500)]
    FMOTIVAZIONE_VISITA: Nullable<string>;

    [Association([TAssociationProp.Lazy, TAssociationProp.Required], CascadeTypeAll - [TCascadeType.Remove])]
    [JoinColumn('ID_PETPERSONALE', [TColumnProp.Required], 'ID')]
    FID_PETPERSONALE: Proxy<TPETPERSONALE>;

    [Association([TAssociationProp.Lazy, TAssociationProp.Required], CascadeTypeAll - [TCascadeType.Remove])]
    [ForeignJoinColumn('ID',[TColumnProp.Required],'ID')]
    FID_PETCACHEPERSONALE: TPETCACHEPERSONALE;

    [Association([TAssociationProp.Lazy], CascadeTypeAll - [TCascadeType.Remove])]
    [JoinColumn('ID_SSTESITI', [], 'ID')]
    FID_SSTESITI: Proxy<TSSTESITI>;

    [Association([TAssociationProp.Lazy], CascadeTypeAll - [TCascadeType.Remove])]
    [JoinColumn('ID_SSTMEDICI', [], 'ID')]
    FID_SSTMEDICI: Proxy<TSSTMEDICI>;
    function GetID_PETPERSONALE: Proxy<TPETPERSONALE>;
    procedure SetID_PETPERSONALE(const Value: Proxy<TPETPERSONALE>);
    function GetID_SSTESITI: TSSTESITI;
    procedure SetID_SSTESITI(const Value: TSSTESITI);
    function GetID_SSTMEDICI: TSSTMEDICI;
    procedure SetID_SSTMEDICI(const Value: TSSTMEDICI);
    function GetID_PETCACHEPERSONALE: TPETCACHEPERSONALE;
    procedure SetID_PETCACHEPERSONALE(const Value: TPETCACHEPERSONALE);
  public
    property ID: Integer read FID write FID;
    property ID_CMTSTATI: Integer read FID_CMTSTATI write FID_CMTSTATI;
    property ID_SSTVISITE: Nullable<Integer> read FID_SSTVISITE write FID_SSTVISITE;
    property DATA_PIANIFICATA: TDateTime read FDATA_PIANIFICATA write FDATA_PIANIFICATA;
    property DATA_CONCORDATA: Nullable<TDateTime> read FDATA_CONCORDATA write FDATA_CONCORDATA;
    property ORA_VISITA: Nullable<string> read FORA_VISITA write FORA_VISITA;
    property DATA_EFFETTIVA: Nullable<TDateTime> read FDATA_EFFETTIVA write FDATA_EFFETTIVA;
    property PERIODICITA: Nullable<Integer> read FPERIODICITA write FPERIODICITA;
    property DATA_VALIDITA: Nullable<TDateTime> read FDATA_VALIDITA write FDATA_VALIDITA;
    property FORZA_DATA_VALIDITA: Nullable<string> read FFORZA_DATA_VALIDITA write FFORZA_DATA_VALIDITA;
    property LUOGOVISITA: Nullable<string> read FLUOGOVISITA write FLUOGOVISITA;
    property ID_SSTTIPIRICHIEDENTE: Nullable<Integer> read FID_SSTTIPIRICHIEDENTE write FID_SSTTIPIRICHIEDENTE;
    property ID_SSTTIPOLOGIEVISITA: Nullable<Integer> read FID_SSTTIPOLOGIEVISITA write FID_SSTTIPOLOGIEVISITA;
    property NOTE: Nullable<string> read FNOTE write FNOTE;
    property ESITO_ACCERTAMENTO: Nullable<string> read FESITO_ACCERTAMENTO write FESITO_ACCERTAMENTO;
    property PIANIFICAZIONEMANUALE: Nullable<string> read FPIANIFICAZIONEMANUALE write FPIANIFICAZIONEMANUALE;
    property ID_GRUPPOOMOGENEO: Nullable<Integer> read FID_GRUPPOOMOGENEO write FID_GRUPPOOMOGENEO;
    property ID_MANSIONE: Nullable<Integer> read FID_MANSIONE write FID_MANSIONE;
    property ID_STRUTTURAORGANIZZATIVA: Nullable<Integer> read FID_STRUTTURAORGANIZZATIVA write FID_STRUTTURAORGANIZZATIVA;
    property ID_SSTAMBULATORI: Nullable<Integer> read FID_SSTAMBULATORI write FID_SSTAMBULATORI;
    property CONFERMACONVOCAZIONE: Nullable<string> read FCONFERMACONVOCAZIONE write FCONFERMACONVOCAZIONE;
    property ORASUGGERITA_DA: Nullable<TDateTime> read FORASUGGERITA_DA write FORASUGGERITA_DA;
    property ORASUGGERITA_A: Nullable<TDateTime> read FORASUGGERITA_A write FORASUGGERITA_A;
    property COMMENTOUTENTE: Nullable<string> read FCOMMENTOUTENTE write FCOMMENTOUTENTE;
    property NOTE_MEDICO: TBlob read FNOTE_MEDICO write FNOTE_MEDICO;
    property PRESCRIZIONI_NON_STANDARD: TBlob read FPRESCRIZIONI_NON_STANDARD write FPRESCRIZIONI_NON_STANDARD;
    property ID_SSTESPOSIZIONE: Nullable<Integer> read FID_SSTESPOSIZIONE write FID_SSTESPOSIZIONE;
    property GRUPPIOMOGENEI: TBlob read FGRUPPIOMOGENEI write FGRUPPIOMOGENEI;
    property DATA_RICHIESTA: Nullable<TDateTime> read FDATA_RICHIESTA write FDATA_RICHIESTA;
    property MOTIVAZIONE_VISITA: Nullable<string> read FMOTIVAZIONE_VISITA write FMOTIVAZIONE_VISITA;
    property ID_PETPERSONALE: Proxy<TPETPERSONALE> read GetID_PETPERSONALE write SetID_PETPERSONALE;
    property ID_SSTESITI: TSSTESITI read GetID_SSTESITI write SetID_SSTESITI;
    property ID_SSTMEDICI: TSSTMEDICI read GetID_SSTMEDICI write SetID_SSTMEDICI;
    property ID_PETCACHEPERSONALE: TPETCACHEPERSONALE read GetID_PETCACHEPERSONALE write SetID_PETCACHEPERSONALE;
  end;

And upon trying to load the latter in a service Aurelius complains about the former.
All classes have a call to RegisterEntity in the initialization section, so there is no compiler woopla' going on.

TBFIveXXXX is an abstract entity with some logging information (user and date for insert and modification)

What else might cause this error?

Thanks!

Can you please specify exactly what is "trying to load"? What is the code?
And what is the exact error message Aurelius displays?

Are you getting warnings in your code, specially about unknown attributes?

Have you tried to temporarily remove the ancestor class (TBFiveModelDataLogBase), i.e., inheriting your entities directly from TObject to see if the ancestor class is affecting somehow?

I use Find in the ObjectManager (inside the service) to load SSTPERSONALE_VISITE.
ORMVisite := ObjectManager.Find<TSSTPERSONALE_VISITE>.List;
The exception is EInvalidEntity.
The base class is used very successfully in another service without issue, so I doubt that's the problem, but now that the new class raises EInvalidEntity the other service has been broken as well.

Is there a way to determine exactly what causes the entity to be invalid? Because it is obviously part of the model so something is in there that shouldn't be.

Cheers!

Can you please provide the exact error message Aurelius displays?
Can you please try to temporarily remove the ancestor class and see how it behaves?

Removing the base class (predictably) does not change anything:

[Entity]
  [Table('PETPERSONALE')]
  [Id('FID', TIdGenerator.IdentityOrSequence)]
  TPETPERSONALE = class//( TBFiveModelDataLogBase )
  private
    [Column('ID', [TColumnProp.Required, TColumnProp.NoInsert, TColumnProp.NoUpdate])]
    FID: Integer;

    [Column('MATRICOLA', [TColumnProp.Required], 50)]
    FMATRICOLA: string;

    [Column('ID_CMTSTATI', [])]
    FID_CMTSTATI: Nullable<Integer>;

    [Column('EMAIL', [], 255)]
    FEMAIL: Nullable<string>;

    [Column('TELEFONO', [], 50)]
    FTELEFONO: Nullable<string>;

    [Column('DATA_INIZIO', [])]
    FDATA_INIZIO: Nullable<TDateTime>;

    [Column('DATA_FINE', [])]
    FDATA_FINE: Nullable<TDateTime>;

    [Column('ID_PIANO', [])]
    FID_PIANO: Nullable<Integer>;

    [Column('ESCLUDI_INCARICO', [], 1)]
    FESCLUDI_INCARICO: Nullable<string>;

    [Column('SMART_WORKING', [], 1)]
    FSMART_WORKING: Nullable<string>;

    [Column('INSERIMENTO_MANUALE', [], 1)]
    FINSERIMENTO_MANUALE: Nullable<string>;

    [Column('CID', [], 8)]
    FCID: Nullable<string>;

    [Column('RESPONSABILE', [], 1)]
    FRESPONSABILE: Nullable<string>;

    [Column('GRADO', [], 20)]
    FGRADO: Nullable<string>;

    [Column('GENERA_INCARICO_FLUSSO', [], 1)]
    FGENERA_INCARICO_FLUSSO: Nullable<string>;

    [Column('DATA_FINE_ESCLUDI_INCARICO', [])]
    FDATA_FINE_ESCLUDI_INCARICO: Nullable<TDateTime>;

    [Column('NOTE', [], 1000)]
    FNOTE: Nullable<string>;

//    [Association([TAssociationProp.Lazy], CascadeTypeAll - [TCascadeType.Remove])]
//    [JoinColumn('ID_CMTSITI', [], 'ID_CMTOGGETTI')]
//    FID_CMTSITI: Proxy<TCMTSITI>;
//
    [Association([TAssociationProp.Lazy], CascadeTypeAll - [TCascadeType.Remove])]
    [JoinColumn('ID_CMTSOCIETA', [], 'ID')]
    FID_CMTSOCIETA: Proxy<TCMTSOCIETA>;
//
//    [Association([TAssociationProp.Lazy], CascadeTypeAll - [TCascadeType.Remove])]
//    [JoinColumn('ID_CMTUNITAORGANIZZATIVE', [], 'ID')]
//    FID_CMTUNITAORGANIZZATIVE: Proxy<TCMTOGGETTI>;

    [Association([TAssociationProp.Lazy, TAssociationProp.Required], CascadeTypeAll - [TCascadeType.Remove])]
    [JoinColumn('ID_PETANAGRAFICA', [TColumnProp.Required], 'ID')]
    FID_PETANAGRAFICA: Proxy<TPETANAGRAFICA>;
//    function GetID_CMTSITI: TCMTSITI;
//    procedure SetID_CMTSITI(const Value: TCMTSITI);
    function GetID_CMTSOCIETA: TCMTSOCIETA;
    procedure SetID_CMTSOCIETA(const Value: TCMTSOCIETA);
//    function GetID_CMTUNITAORGANIZZATIVE: TCMTOGGETTI;
//    procedure SetID_CMTUNITAORGANIZZATIVE(const Value: TCMTOGGETTI);
    function GetID_PETANAGRAFICA: TPETANAGRAFICA;
    procedure SetID_PETANAGRAFICA(const Value: TPETANAGRAFICA);
  public
    property ID: Integer read FID write FID;
    property MATRICOLA: string read FMATRICOLA write FMATRICOLA;
    property ID_CMTSTATI: Nullable<Integer> read FID_CMTSTATI write FID_CMTSTATI;
    property EMAIL: Nullable<string> read FEMAIL write FEMAIL;
    property TELEFONO: Nullable<string> read FTELEFONO write FTELEFONO;
    property DATA_INIZIO: Nullable<TDateTime> read FDATA_INIZIO write FDATA_INIZIO;
    property DATA_FINE: Nullable<TDateTime> read FDATA_FINE write FDATA_FINE;
    property ID_PIANO: Nullable<Integer> read FID_PIANO write FID_PIANO;
    property ESCLUDI_INCARICO: Nullable<string> read FESCLUDI_INCARICO write FESCLUDI_INCARICO;
    property SMART_WORKING: Nullable<string> read FSMART_WORKING write FSMART_WORKING;
    property INSERIMENTO_MANUALE: Nullable<string> read FINSERIMENTO_MANUALE write FINSERIMENTO_MANUALE;
    property CID: Nullable<string> read FCID write FCID;
    property RESPONSABILE: Nullable<string> read FRESPONSABILE write FRESPONSABILE;
    property GRADO: Nullable<string> read FGRADO write FGRADO;
    property GENERA_INCARICO_FLUSSO: Nullable<string> read FGENERA_INCARICO_FLUSSO write FGENERA_INCARICO_FLUSSO;
    property DATA_FINE_ESCLUDI_INCARICO: Nullable<TDateTime> read FDATA_FINE_ESCLUDI_INCARICO write FDATA_FINE_ESCLUDI_INCARICO;
    property NOTE: Nullable<string> read FNOTE write FNOTE;
//    property ID_CMTSITI: TCMTSITI read GetID_CMTSITI write SetID_CMTSITI;
    property ID_CMTSOCIETA: TCMTSOCIETA read GetID_CMTSOCIETA write SetID_CMTSOCIETA;
//    property ID_CMTUNITAORGANIZZATIVE: TCMTOGGETTI read GetID_CMTUNITAORGANIZZATIVE write SetID_CMTUNITAORGANIZZATIVE;
    property ID_PETANAGRAFICA: TPETANAGRAFICA read GetID_PETANAGRAFICA write SetID_PETANAGRAFICA;
  end;

The message is this:
Project BFiveServiceVCL.exe raised exception class EInvalidEntity with message 'Class TPETPERSONALE is not a valid Entity. [Entity] attribute missing or entity does not belong to model.'.

The Entity attribute is there. So, what is wrong with it?

Cheers!

Are you getting warnings in your code, specially about unknown attributes?

HA!
For some reason Aurelius.Mapping.Attributes was missing.

Now it is not causing issues anymore!
Cheers!

This topic was automatically closed 60 minutes after the last reply. New replies are no longer allowed.