Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Fabric Alkalmazások TypeScript-dekorátorokkal definiálják az adatbázistáblákat és API-kat létrehozó adatmodelleket. Az egyes entitásokat @entity() dekorált osztályokként definiálja, adjon hozzá meződekorátorokat az adattípusokhoz, és képezze le az entitások közötti kapcsolatokat.
Az engedélyezéssel és hozzáférés-vezérléssel kapcsolatos útmutatásért tekintse meg az adatengedélyek definiálása című témakört.
Prerequisites
- A
npm create @microsoft/rayfin@latestlétrehozott vagy anpx rayfin initinicializált Fabric Apps-projekt. - A TypeScript osztályok és dekorátorok alapszintű ismerete.
Entitás definiálása
Adatmodell létrehozásához adja hozzá a @entity() dekorátort egy TypeScript-osztályhoz. Ezután importálja a szükséges dekorátorokat a következőből @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;
}
Ez az entitás létrehoz egy táblát Todo , amely oszlopokat tartalmaz a következőhöz id: , title, description, createdAtés updatedAt.
Elsődleges kulcsok
Minden entitás elsődleges kulcsként elnevezett string UUID-mezőt id használ. Ha nem deklarálja id explicit módon, Fabric Apps automatikusan hozzáadja a sémához.
- A
idmező nem kötelező a létrehozási műveletek során – ha kihagyja, a kiszolgáló létrehoz egy UUID azonosítót. - A létrehozáskor saját UUID-t is megadhat, ha az ügyfél által létrehozott azonosítókat részesíti előnyben.
- Az összetett elsődleges kulcsok és az egyéni kulcsnevek nem támogatottak.
@entity()
export class Note {
@uuid() id!: string; // UUID primary key, auto-generated when omitted
@text() title!: string;
@text() content!: string;
}
Támogatott adattípusok
Az alábbi dekorátorok használatával definiálhat mezőtípusokat:
| Lakberendező | Típus | Leírás |
|---|---|---|
@uuid() |
karakterlánc | Egyedi azonosító mező. |
@text() |
karakterlánc | Szövegmező opcionális hosszkorlátozásokkal. |
@int() |
szám | Egész szám mező. |
@decimal() |
szám | Decimális vagy numerikus mező. |
@boolean() |
boolean | Igaz vagy hamis mező. |
@date() |
Date | Dátum- és időmező, ISO-sztringekből vagy Date objektumokból szerializálva. |
@email() |
karakterlánc | Szövegmező e-mail-ellenőrzéssel. |
@set() |
karakterlánc | Sztringliterálok felsorolt halmaza. |
Példa több típussal
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';
}
Típusmódosítók
Módosítók hozzáadása a meződíszítőkhöz az ellenőrzés és a korlátozások konfigurálásához:
| Módosító | Leírás |
|---|---|
{ optional: true } |
NULL értékek engedélyezése. A mezők alapértelmezés szerint kötelezőek. |
{ unique: true } |
Adjon hozzá egy egyedi korlátozást. |
{ default: value } |
Alapértelmezett értékkifejezés beállítása. |
{ max: n }, { min: n } |
Sztringhossz-korlátozások (karakterek maximális és minimális száma). |
{ min: n }, { max: n } |
Numerikus értékkorlátozások. |
Megjegyzés:
A TypeScript opcionális jelölője (? tulajdonságnév után) csak a statikus TypeScript-típusra van hatással. Nem teszi null értékűvé az adatbázis oszlopát. Ha egy mezőt null értékűvé szeretne tenni, adja hozzá { optional: true } a dekorátorhoz. Annak megállapítására használható ! , hogy a keretrendszer inicializálja a szükséges mezőt.
Példa módosítókkal
@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;
}
Kapcsolatok definiálása
Használja a @one() és @many() dekorátorokat az entitások közötti navigációs tulajdonságok meghatározásához. Fabric Alkalmazások automatikusan létrehoznak külső kulcsoszlopokat a kapcsolatok definiálásakor.
-
Egy-a-többhöz kapcsolat – A szülőn használja a(z)
@many()elemet, a gyermeken pedig a(z)@one()elemet. -
Több-egyhez – Használja a(z)
@one()elemet, hogy a gyermekben a szülőre hivatkozzon. - A több-a-többhöz kapcsolat nem támogatott – használjon helyette explicit kapcsoló entitást.
Példa egy-a-többhöz kapcsolatra
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;
}
Amikor a @one(() => Notebook) elemet a Note entitáson meghatározza, a Fabric Apps automatikusan létrehoz egy notebook_id idegen kulcsot tartalmazó oszlopot. Az idegenkulcs-mezőt csak akkor deklarálja explicit módon, ha azt az alkalmazáskódban szeretné olvasni vagy beállítani.
Idegen kulcs elnevezési szabálya
Idegenkulcs-mező definiálásakor használja az {property}_id elnevezési konvenciót:
@entity()
export class Note {
@uuid() id!: string;
@text() notebook_id!: string; // Foreign key field
@one(() => Notebook) notebook?: Notebook; // Navigation property
}
Az egyéni idegen kulcsnevek (foreignKeybeállítások targetKey ) nem támogatottak.
Referenciarendszer-entitások
Fabric Az alkalmazások nem támogatják a @one() olyan kapcsolatokat, amelyek olyan rendszerentitásokra mutatnak, mint például a beépített USER entitás. Ha egy sort szeretne társítani a bejelentkezett felhasználóval, adjon hozzá egy egyszerű user_id típusú @text() mezőt, és töltse ki a hitelesítési jogcímekből (általában claims.sub):
@entity()
export class Task {
@uuid() id!: string;
@text() title!: string;
@text() user_id!: string; // System user ID from claims.sub
}
Szűrje a sorokat user_id alapján a szerepkörházirendekben a felhasználónkénti hozzáférés kikényszerítéséhez.
Entitások regisztrálása a sémában
Adja hozzá az összes entitásosztályt, hogy rayfin/data/schema.ts az ügyfél létrehozhassa a GraphQL-proxykat:
import type { Note } from './Note.js';
import type { Notebook } from './Notebook.js';
export type NotesAppSchema = {
Note: Note;
Notebook: Notebook;
};
Frissítse ezt a típust, amikor új entitást hoz létre.
Séma módosítások alkalmazása
Az entitások definiálása vagy módosítása után alkalmazza a módosításokat az adatbázisra:
Telepítse a frissített sémát a Fabricba:
npx rayfin up db applyHa a sémamódosítás romboló műveleteket (oszlopok elvetését, táblák átnevezését) tartalmaz, a parancssori felület figyelmezteti Önt, és nem hajlandó továbblépni. A biztonsági ellenőrzés felülbírálásához használja a(z)
--forceelemet:npx rayfin up db apply --force
Megjegyzés:
A használat --force adatvesztést okozhat. A folytatás előtt alaposan tekintse át a felsorolt műveleteket.
Bevált gyakorlatok
- Csak akkor definiálhat idegenkulcs-mezőket, ha kódban kell olvasnia vagy beállítania őket – Fabric Az alkalmazások automatikusan generálják őket a navigációs dekorátorokból.
- Relatív importálást használjon bővítményekkel
.jsaz entitásfájlokban, hogy a kibocsátott ESM JavaScript megfelelően oldódjon fel. - Az engedélyezési mintákról és a szerepköralapú hozzáférésről az adatengedélyek definiálása című témakörben olvashat.
Hibaelhárítás
Hiányzó kapcsolatok
Ha a kapcsolatok nem jelennek meg az API-ban, ellenőrizze, hogy:
- A navigációs dekorátor (
@one()vagy@many()) jelen van. - Az entitás regisztrálva van a következőben
rayfin/data/schema.ts: .