Tento článok je zrkadlovým článkom o strojovom preklade, kliknite sem pre prechod na pôvodný článok.

Pohľad: 36284|Odpoveď: 0

[Zdroj] EF Core Series (3) Atribúty tieňa rámca entít [Reprint]

[Kopírovať odkaz]
Zverejnené 7. 2. 2021 o 14:15:08 | | | |
EF Core Series 2 zapuzdruje OnModelCreating, vytvára indexy pomocou odrazov a ďalšie
https://www.itsvse.com/thread-9392-1-1.html

Tieňové vlastnosti sú vlastnosti, ktoré nie sú definované v triede entity .NET, ale sú definované pre daný typ entity v EF Core modeli. Hodnoty a stavy týchto atribútov sú udržiavané čisto v sledovači zmien. Tieňované vlastnosti sú užitočné, keď údaje v databáze by nemali byť vystavené na mapovanom type entity.
Jadro Entity Framework zavádza nový typ atribútu nazývaný atribút "tieň", ktorý v EF 6.x neexistuje.

Atribút tieňa tam nie je. .NET entity class. Namiesto toho ho môžete nakonfigurovať pre konkrétny typ entity v dátovom modeli entity. Môže byť nakonfigurovaný metódou OnModelCreating() pre kontextovú triedu.

Nasledujúci diagram ilustruje atribút tieňa.



Ako je znázornené na obrázku vyššie, atribút tieňa nepatrí do vašej triedy entity. Preto k nemu nemôžete pristupovať pri prístupe k iným vlastnostiam entity. Tieňované vlastnosti je možné nastaviť len pre typy entít pri budovaní dátového modelu entít a budú tiež mapované na databázové stĺpce. Hodnota a stav tieňovej vlastnosti sú udržiavané iba v sledovači zmien.

Poďme pochopiť praktické aspekty tieňových vlastností. Povedzme, že potrebujeme udržiavať dátumy vytvorenia a aktualizácie každého záznamu v databázovej tabuľke. Naučili ste sa, ako nastaviť dátumy vytvorenia a modifikácie entít v EF Core definovaním vlastností CreatedDate a UpdatedDate v triede entity. Tu uvidíme, ako dosiahnuť rovnaký výsledok použitím tieňových vlastností namiesto zahrnutia tieňových vlastností do triedy entity.

Zvážte nasledujúce triedy entít Študent.

Študentská trieda vyššieAtribúty CreatedDate a UpdatedDate nie sú zahrnutéaby sa zachoval čas vytvorenia alebo aktualizácie. Konfigurujeme ich ako tieňové vlastnosti na entite Študent.

Definujte tieňové vlastnosti

Metódu OnModelCreating() môžete použiť na definovanie tieňových vlastností pre typy entít pomocou Fluent API.

Nasledujúca konfigurácia konfiguruje dve tieňované vlastnosti, CreatedDate a UpdatedDate, pre entitu Student.


Ako vidíte, na konfiguráciu tieňových vlastností sa používa metóda Property(). Špecifikujte názov vlastnosti tieňa ako reťazec a typ ako generický parameter. Ak názov špecifikovaný v metóde Property() zodpovedá názvu existujúcej vlastnosti, EF Core túto existujúcu vlastnosť nakonfiguruje ako tieňovú vlastnosť namiesto zavádzania novej tieňovej vlastnosti.

Tieňové vlastnosti v databáze

Keď sú vlastnosti tieňov definované, musíme aktualizovať schému databázy, pretože vlastnosti tieňa budú mapované na príslušné stĺpce databázy.

Na to pridajte migráciu databázy do konzoly Package Manager vo Visual Studio pomocou nasledujúceho príkazu.


Tabuľka Študent bude teraz obsahovať dva stĺpce, Dátum vytvorenia a Dátum aktualizácie v SQL Serveri, ako je uvedené nižšie.



Takže aj keď tieto vlastnosti nezahrnieme do triedy Student a nekonfigurujeme ich ako tieňové vlastnosti, databáza bude mať príslušné stĺpce.

Prístup k tieňovému majetku

Môžete použiť metódu Property() na získanie alebo nastavenie hodnoty tieňovej vlastnosti v EntityEntry. Nasledujúci kód pristupuje k hodnote tieňovej vlastnosti.

V našom scenári však chceme automaticky nastaviť hodnoty týchto tieňových vlastností v metóde SaveChanges(), aby sme ich nemuseli manuálne nastavovať na každom entity objekte. Preto prepíšte metódu SaveChanges() v kontextovej triede, ako je uvedené nižšie.

To automaticky nastaví hodnoty pre tieňové vlastnosti CreatedDate a UpdatedDate.

Teraz spustite nasledujúci kód a skontrolujte záznamy v databáze.


Vyššie uvedený kód vloží nasledujúce záznamy do Dátumu vytvorenia a Dátumu aktualizácie pre študentov.



Takže konfiguráciou tieňových vlastností ich nemusíme zahrnúť do triedy entity.

Nakonfigurujte tieňové vlastnosti na všetkých entitách

Namiesto manuálnej konfigurácie tieňových vlastností na všetkých entitách naraz ich môžete nastaviť manuálne.

Napríklad môžeme naposledy nastaviť všetky entity CreatedDate a UpdatedDate, ako je znázornené na nasledujúcom obrázku.


Kedy použiť tieňovú vlastnosť?

Atribút tieňa môže byť použitý v dvoch situáciách:

Keď nechcete vystavovať databázové stĺpce na mapovaných entitách, ako je to scenár uvedený vyššie.
Keď nechcete vystavovať atribúty cudzích kľúčov, ale chcete používať navigačné atribúty len na správu vzťahov. Vlastnosť cudzieho kľúča bude tieňová vlastnosť a bude mapovaná na stĺpec databázy, ale nebude vystavená ako vlastnosť entity. (V EF Core, ak nedefinujete vlastnosť cudzieho kľúča v triede entity, automaticky vygeneruje tieňovú vlastnosť pre toto.) Vlastnosti cudzieho kľúča nemusíte manuálne konfigurovať. )


Zdroje:

Prihlásenie na hypertextový odkaz je viditeľné.
Prihlásenie na hypertextový odkaz je viditeľné.




Predchádzajúci:MySQL exportuje výsledky dopytu do súboru
Budúci:ASP.NET Základný tutoriál ViewComponent o používaní ViewComponent
Vyhlásenie:
Všetok softvér, programovacie materiály alebo články publikované spoločnosťou Code Farmer Network slúžia len na vzdelávacie a výskumné účely; Vyššie uvedený obsah nesmie byť použitý na komerčné alebo nezákonné účely, inak nesú všetky následky používateľmi. Informácie na tejto stránke pochádzajú z internetu a spory o autorské práva s touto stránkou nesúvisia. Musíte úplne vymazať vyššie uvedený obsah zo svojho počítača do 24 hodín od stiahnutia. Ak sa vám program páči, podporte originálny softvér, zakúpte si registráciu a získajte lepšie originálne služby. Ak dôjde k akémukoľvek porušeniu, kontaktujte nás prosím e-mailom.

Mail To:help@itsvse.com