DEV Community

Cover image for Trysil - TWhereClause
David Lastrucci
David Lastrucci

Posted on

Trysil - TWhereClause

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)
);
Enter fullscreen mode Exit fullscreen mode

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);
Enter fullscreen mode Exit fullscreen mode


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;
Enter fullscreen mode Exit fullscreen mode


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;
Enter fullscreen mode Exit fullscreen mode


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;
Enter fullscreen mode Exit fullscreen mode


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:

https://github.com/davidlastrucci/Trysil

Top comments (0)