You are not logged in.
Hi
I've noticed that calculated fields in ORM classes created as read-only published properties, are actually created as DB tables. For example in this class:
TPerson = class(TOrm)
private
fFirstName, fSurName: RawUTF8;
protected
function GetFullName: RawUTF8;
published
property FirstName: RawUTF8 index 50 read fFirstName write fFirstName;
property SurName: RawUTF8 index 50 read fSurName write fSurName;
property FullName: RawUTF8 read GetFullName;
end;
registered as a virtual MS-SQL Server table, ORM actually creates a field named FullName in the database table. Is there any purpose on this? In case I don't want a calculated field to be actually created as a db table field, do I have to use a public calculation function instead (e.g. GetFullName), and not a published property?
Offline
In case I don't want a calculated field to be actually created as a db table field, do I have to use a public calculation function instead (e.g. GetFullName), and not a published property?
Yes, you can write it like this:
TPerson = class(TOrm)
private
...
function GetFullName: RawUTF8;
public
property FullName: RawUTF8 read GetFullName;
published
property FirstName: RawUTF8 index 50 read fFirstName write fFirstName;
property SurName: RawUTF8 index 50 read fSurName write fSurName;
end;
But for clarity, I would write it this way:
TCustomPerson = class(TOrmBaseRecord)
private
fFirstName, fSurName: RawUTF8;
published
property FirstName: RawUTF8 index 50 read fFirstName write fFirstName;
property SurName: RawUTF8 index 50 read fSurName write fSurName;
end;
TPerson = class(TCustomPerson)
private
function GetFullName: RawUTF8;
public
property FullName: RawUTF8 read GetFullName;
end;
Then, if necessary, you can derive the ORM object TOrmBaseRecord on the server or client from different base objects using a compiler switch. On the server derived from the class TOrm and on the client from the class TObjectWithID. All TCustom... classes could be shared between server and client. The specializations are done only in the final classes. I have already described the technique here in the forum.
With best regards
Thomas
Last edited by tbo (2023-05-22 12:32:47)
Offline
Thanks Thomas!
Offline