Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Fabric Apps používá dekorátory TypeScriptu k definování datových modelů, které generují databázové tabulky a rozhraní API. Každou entitu definujete jako třídu zdobenou @entity(), přidáte dekorátory polí pro datové typy a mapujete vztahy mezi entitami.
Pokyny k autorizaci a řízení přístupu najdete v tématu Definování oprávnění k datům.
Předpoklady
- Projekt Fabric Apps vytvořený pomocí
npm create @microsoft/rayfin@latestnebo inicializovaný pomocínpx rayfin init. - Základní znalost tříd a dekorátorů v TypeScriptu.
Definování entity
Pokud chcete vytvořit datový model, přidejte @entity() dekorátor do třídy TypeScript. Potom naimportujte požadované dekorátory z @microsoft/rayfin-core:
import { entity, uuid, text, date } from '@microsoft/rayfin-core';
@entity()
export class Todo {
@uuid() id!: string;
@text() title!: string;
@text({ optional: true }) description?: string;
@date() createdAt!: Date;
@date() updatedAt!: Date;
}
Tato entita Todo generuje tabulku se sloupci pro id, titledescription, , createdAta updatedAt.
Primární klíče
Každá entita používá pole UUID string pojmenované id jako primární klíč. Pokud explicitně nehlásíte id, Fabric Apps ho automaticky přidá do schématu.
- Pole
idje volitelné během operací vytváření – pokud ho vynecháte, server vygeneruje UUID. - Pokud dáváte přednost identifikátorům generovaným klientem, můžete při vytváření zadat vlastní UUID.
- Složené primární klíče a názvy vlastních klíčů se nepodporují.
@entity()
export class Note {
@uuid() id!: string; // UUID primary key, auto-generated when omitted
@text() title!: string;
@text() content!: string;
}
Podporované datové typy
K definování typů polí použijte tyto dekorátory:
| Dekoratér | Typ | Description |
|---|---|---|
@uuid() |
řetězec | Pole jedinečného identifikátoru |
@text() |
řetězec | Textové pole s volitelnými omezeními délky |
@int() |
Číslo | Celočíselné pole |
@decimal() |
Číslo | Desetinné nebo číselné pole |
@boolean() |
boolean | Pole typu pravda/nepravda |
@date() |
Date | Pole pro datum a čas, serializuje se z řetězců ISO nebo objektů Date. |
@email() |
řetězec | Textové pole s ověřením e-mailu |
@set() |
řetězec | Výčtová množina řetězcových literálů |
Příklad s více typy
import { entity, uuid, text, int, decimal, boolean, date, set } from '@microsoft/rayfin-core';
@entity()
export class Product {
@uuid() id!: string;
@text() name!: string;
@decimal() price!: number;
@int() stockQuantity!: number;
@boolean() isAvailable!: boolean;
@date() createdAt!: Date;
@set('draft', 'published', 'archived') status!: 'draft' | 'published' | 'archived';
}
Modifikátory typů
Přidání modifikátorů do dekorátorů polí pro konfiguraci ověřování a omezení:
| Modifikátor | Description |
|---|---|
{ optional: true } |
Povolit hodnoty NULL. Pole jsou ve výchozím nastavení povinná. |
{ unique: true } |
Přidejte jedinečné omezení. |
{ default: value } |
Nastavte výchozí výraz hodnoty. |
{ max: n }, { min: n } |
Omezení délky řetězce (maximální a minimální počet znaků) |
{ min: n }, { max: n } |
Omezení číselných hodnot |
Poznámka:
Volitelná značka TypeScriptu (? za názvem vlastnosti) má vliv pouze na statický typ TypeScriptu. Nenastaví databázový sloupec tak, aby povoloval hodnotu NULL. Pokud chcete nastavit pole s možnou hodnotou null, přidejte { optional: true } do dekorátoru. Slouží ! k tvrzení, že rozhraní inicializuje požadované pole.
Příklad s modifikátory
@entity()
export class User {
@uuid() id!: string;
@email({ unique: true }) email!: string;
@text({ min: 3, max: 50 }) username!: string;
@text({ optional: true, max: 500 }) bio?: string;
@int({ min: 0, max: 150 }) age!: number;
@boolean({ default: false }) isVerified!: boolean;
}
Definování relací
K definování vlastností navigace mezi entitami použijte @one() a @many() dekorátory. Fabric Apps automaticky generuje sloupce cizího klíče při definování relací.
-
1:N – používá se
@many()u nadřazeného objektu a@one()u podřízeného objektu. -
Mnoho k jednomu – U podřízeného objektu použijte
@one()k odkazování na nadřazený objekt. - Relace M:N nejsou podporovány – místo toho použijte explicitní spojovací entitu.
Příklad s relací jeden k mnoha
import { entity, uuid, text, date, one, many } from '@microsoft/rayfin-core';
@entity()
export class Notebook {
@uuid() id!: string;
@text() name!: string;
@date() createdAt!: Date;
@many(() => Note) notes?: Note[];
}
@entity()
export class Note {
@uuid() id!: string;
@text() title!: string;
@text() content!: string;
@date() createdAt!: Date;
@text() notebook_id!: string;
@one(() => Notebook) notebook?: Notebook;
}
Když definujete @one(() => Notebook) u entity Note, Fabric Apps automaticky vytvoří sloupec notebook_id cizího klíče. Deklarujte pole cizího klíče explicitně pouze v případě, že plánujete číst nebo nastavovat v kódu aplikace.
Zásady vytváření názvů cizích klíčů
Při definování pole cizího klíče použijte {property}_id konvenci pojmenování:
@entity()
export class Note {
@uuid() id!: string;
@text() notebook_id!: string; // Foreign key field
@one(() => Notebook) notebook?: Notebook; // Navigation property
}
Vlastní názvy cizích klíčů (foreignKey, targetKey možnosti) se nepodporují.
Referenční systémové entity
Fabric Apps nepodporuje relace @one(), které odkazují na systémové entity, jako je integrovaná entita USER. Chcete-li přiřadit řádek přihlášenému uživateli, přidejte jednoduché pole user_id typu @text() a naplňte jej z claimů ověření (obvykle claims.sub):
@entity()
export class Task {
@uuid() id!: string;
@text() title!: string;
@text() user_id!: string; // System user ID from claims.sub
}
Filtrujte řádky podle user_id v zásadách rolí, abyste vynutili přístup na úrovni jednotlivých uživatelů.
Zaregistrujte entity ve schématu
Přidejte do rayfin/data/schema.ts všechny třídy entit, aby klient mohl generovat proxy objekty GraphQL:
import type { Note } from './Note.js';
import type { Notebook } from './Notebook.js';
export type NotesAppSchema = {
Note: Note;
Notebook: Notebook;
};
Tento typ aktualizujte vždy, když vytvoříte novou entitu.
Použití změn ve schématu
Po definování nebo úpravě entit použijte změny v databázi:
Nasaďte aktualizované schéma do Fabric:
npx rayfin up db applyPokud změna schématu zahrnuje destruktivní operace (vyřazení sloupců, přejmenování tabulek), rozhraní příkazového řádku vás upozorní a odmítne pokračovat. Použijte
--forcek obejití bezpečnostní kontroly:npx rayfin up db apply --force
Poznámka:
Použití --force může způsobit ztrátu dat. Než budete pokračovat, pečlivě si projděte uvedené operace.
Osvědčené postupy
- Pole cizího klíče definujte pouze tehdy, když je potřebujete v kódu číst nebo nastavovat – aplikace Fabric je automaticky generuje z navigačních dekorátorů.
- Používejte v souborech entit relativní importy s příponami
.js, aby se vygenerovaný JavaScript ESM správně načítal. - Vzory autorizace a přístup na základě role najdete v tématu Definování oprávnění k datům.
Řešení problémů
Chybějící relace
Pokud se relace v rozhraní API nezobrazí, ověřte, že:
- Nachází se dekorátor navigace (
@one()nebo@many()). - Entita je zaregistrována v
rayfin/data/schema.ts.