Introduzione
Uno degli attributi disponibili in "Trysil - Delphi ORM" è [TWhereClauseAttribute].
Cerco, in questo articolo, di spiegarne l'utilità.
Database
Prendiamo ad esempio la seguente tabella del database:
CREATE TABLE Users(
ID int NOT NULL,
Firstname nvarchar(255) NOT NULL,
Lastname nvarchar(255) NOT NULL,
UserType int NOT NULL,
VersionID int NOT NULL,
PRIMARY KEY (ID)
);
Stabiliamo che la colonna UserType potrà contenere i valori 0 (Insegnante) e 1 (Studente).
Aggiungiamo un indice alla tabella per ottimizzare i filtri:
CREATE INDEX Users_Index1 ON Users (UserType);
TUser
Definiamo il modello astratto per l'entità TUser:
{ TUser }
[TTable('Users')]
[TSequence('UsersID')]
TUser = class abstract
strict private
[TPrimaryKey]
[TColumn('ID')]
FID: TTPrimaryKey;
[TColumn('Firstname')]
FFirstname: String;
[TColumn('Lastname')]
FLastname: String;
[TVersionColumn]
[TColumn('VersionID')]
FVersionID: TTVersion;
strict protected
[TColumn('UserType')]
FUserType: Integer;
public
property ID: TTPrimaryKey read FID;
property Firstname: String read FFirstname write FFirstname;
property Lastname: String read FLastname write FLastname;
property VersionID: TTVersion read FVersionID;
end;
TTeacher
Specializziamo l'entità TTeacher:
{ TTeacher }
[TWhereClause('UserType = 0')]
TTeacher = class(TUser)
public
procedure AfterConstruction; override;
end;
// ...
procedure TTeacher.AfterConstruction;
begin
inherited AfterConstruction;
FUserType := 0;
end;
TStudent
Specializziamo poi l'entità TStudent:
{ TStudent }
[TWhereClause('UserType = 1')]
TStudent = class(TUser)
procedure AfterConstruction; override;
end;
// ...
procedure TStudent.AfterConstruction;
begin
inherited AfterConstruction;
FUserType := 1;
end;
Trysil
Adesso siamo in grado di utilizzare TTeacher e TStudent con Trysil come se le due entità fossero persistite su due tabelle separate, in realtà entrambe andranno ad eseguire tutte le operazioni di CRUD sulla tabelle Users del database.
Per saperne di più su Trysil - Delphi ORM visita il link al progetto:
Top comments (0)