Consider below declarations (some properties and getters/setters removed for readibility):
// Entity TWellbore omitted - not relevant
[Entity]
[Table('Operation')]
TOperation = class(TBaseEntity)
private
[Column('OperationType', [TColumnProp.Required], 15)]
FOperationType: TOperationType;
[Column('OperationName', [TColumnProp.Required], 50)]
FOperationName: string;
[Association([TAssociationProp.Lazy, TAssociationProp.Required], CascadeTypeAll - [TCascadeType.Remove])]
[ForeignKey('FK_Operation_Wellbore')]
[JoinColumn('ID_Parent', [TColumnProp.Required], 'ID')]
FWellbore: Proxy<TWellbore>;
function GetWellbore: TWellbore;
procedure SetWellbore(const Value: TWellbore);
public
property OperationType: TOperationType read FOperationType write FOperationType;
property OperationName: string read FOperationName write FOperationName;
property Wellbore: TWellbore read GetWellbore write SetWellbore;
end;
// This is the "in between class that I decorate with a ManyValuedAssociation Days
[Entity]
TOperation_Day = class(TOperation)
private
[ManyValuedAssociation([TAssociationProp.Lazy, TAssociationProp.Required], CascadeTypeAllRemoveOrphan,
'FOperation_Day')]
FDays: Proxy<TList<TDay>>;
function GetDays: TList<TDay>;
public
property Days: TList<TDay> read GetDays;
end;
[Entity]
[Table('Day')]
TDay = class(TBaseEntity)
private
[Column('ReportDate', [TColumnProp.Required])]
FReportDate: TDateTime;
[Association([TAssociationProp.Lazy], CascadeTypeAll - [TCascadeType.Remove])]
[ForeignKey('FK_Day_Operation')]
[JoinColumn('ID_Parent', [TColumnProp.Required], 'ID')]
FOperation_Day: Proxy<TOperation_Day>;
function GetOperation_Day: TOperation_Day;
procedure SetOperation_Day(const Value: TOperation_Day);
public
property ReportDate: TDateTime read FReportDate write FReportDate;
property Operation_Day: TOperation_Day read GetOperation_Day write SetOperation_Day;
end;
On DBSchema.UpdateDatabase, I get an access violation in TTableCreator.CreateTable. To be specific in Table.Name := MappedTable.Name when EntityType in the line above is TOperation_Day.
Is this construction ("in between class") not allowed or am I doing something wrong?
On another note: I am applying this decorating to have a light-weight top class for fast data navigation. The derived class with several (!) many-valued associations is then used for data editing. However, I am now wondering if this is worth the "effort". Will loading entities be any slower when they include lazy-loading associations? Probably not, but I am still curious to hear why my above "construction" fails...