Varjo-ominaisuudet ovat ominaisuuksia, joita ei ole määritelty .NET-entiteettiluokassa, mutta jotka on määritelty kyseiselle entiteettityypille EF Core -mallissa. Näiden attribuuttien arvot ja tilat säilytetään pelkästään muutosseurannassa. Varjostetut ominaisuudet ovat hyödyllisiä, kun tietokannan tietoja ei tulisi paljastaa kartoitetun entiteettityypin yhteydessä. Entity Frameworkin ydin esittelee uuden attribuutityypin nimeltä "shadow"-attribuutti, jota ei ole EF 6.x:ssä.
Varjoattribuuttia ei ole. .NET-entiteettiluokat. Sen sijaan voit konfiguroida sen tietylle entiteettityypille entiteettidatamallissa. Se voidaan konfiguroida kontekstiluokan OnModelCreating()-menetelmällä.
Seuraava kaavio havainnollistaa varjoattribuutin.
Kuten yllä olevasta kuvasta näkyy, varjoattribuutti ei kuulu entiteettiluokkaasi. Siksi et voi käyttää sitä, kun käytät muita olennon ominaisuuksia. Varjostetut ominaisuudet voidaan konfiguroida vain entiteettityypeille entiteettimallia rakennettaessa, ja ne myös yhdistetään tietokantasarakkeisiin. Varjo-ominaisuuden arvo ja tila säilyvät vain muutosseurannassa.
Ymmärretään varjoominaisuuksien käytännön näkökohdat. Oletetaan, että meidän täytyy säilyttää jokaisen tietueen luonti- ja päivityspäivät tietokantataulussa. Opit asettamaan entiteettien luonti- ja muokkauspäivät EF Coressa määrittelemällä CreatedDate- ja UpdatedDate-ominaisuudet entiteettiluokassa. Tässä näemme, miten sama tulos saavutetaan käyttämällä varjoominaisuuksia sen sijaan, että varjo-ominaisuudet sisällytettäisiin entiteettiluokkaan.
Tarkastellaan seuraavia opiskelijoiden luokkia.
Yllä oleva opiskelijaluokkaCreatedDate- ja UpdatedDate-attribuutit eivät sisällyylläpitää aikaa, jolloin se luotiin tai päivitettiin. Määritämme ne varjoominaisuuksiksi opiskelija-entiteettissä.
Määrittele varjo-ominaisuudet
Voit käyttää OnModelCreating()-menetelmää määritelläksesi varjo-ominaisuuksia entiteettityypeille Fluent API:n avulla.
Seuraava konfiguraatio konfiguroi kaksi varjostettua ominaisuutta, CreatedDate ja UpdatedDate, opiskelija-entiteetille.
Kuten näette, Property()-metodia käytetään varjo-ominaisuuksien konfigurointiin. Määritä varjo-ominaisuuden nimi merkkijonona ja tyyppi geneerisenä parametrina. Jos Property()-metodissa annettu nimi vastaa olemassa olevan ominaisuuden nimeä, EF Core määrittää kyseisen ominaisuuden varjoominaisuudeksi uuden varjo-ominaisuuden sijaan.
Varjo-ominaisuudet tietokannassa
Kun varjo-ominaisuudet on määritelty, meidän täytyy päivittää tietokantaskeema, sillä varjo-ominaisuudet yhdistetään vastaaviin tietokantasarakkeisiin.
Tätä varten lisää tietokannan migraatio Visual Studion Package Manager -konsolissa seuraavalla komennolla.
Student-taulukko sisältää nyt kaksi sarakkea, CreatedDate ja UpdatedDate SQL Serverissä, kuten alla on esitetty.
Joten vaikka emme sisällyttäisi näitä ominaisuuksia Student-luokkaan ja määrittäisi ne varjo-ominaisuuksiksi, tietokannassa on vastaavat sarakkeet.
Pääsy varjo-ominaisuuteen
Voit käyttää Property()-menetelmää saadaksesi tai asettaaksesi varjo-ominaisuuden arvon EntityEntryssä. Seuraava koodi tarkastelee varjo-ominaisuuden arvoa.
Meidän skenaariossamme haluamme kuitenkin asettaa arvot automaattisesti näille varjo-ominaisuuksille SaveChanges()-metodissa, jotta meidän ei tarvitse asettaa niitä manuaalisesti jokaiselle entiteettiobjektille. Joten ohita SaveChanges()-metodi kontekstiluokassa, kuten alla on esitetty.
Tämä asettaa automaattisesti arvot CreatedDate- ja UpdatedDate-varjo-ominaisuuksille.
Suorita seuraava koodi ja tarkista tietokannan tietueet.
Yllä oleva koodi lisää seuraavat tietueet CreatedDate- ja UpdatedDate-tiedostoihin opiskelijoille.
Joten varjo-ominaisuudet konfiguroimalla meidän ei tarvitse sisällyttää niitä entiteettiluokkaan.
Määritä varjo-ominaisuudet kaikille entiteetteille
Sen sijaan, että varjo-ominaisuudet konfiguroidaan manuaalisesti kaikille entiteetteille kerralla, voit määrittää ne manuaalisesti.
Esimerkiksi voimme konfiguroida kaikki viimeksi CreatedDate- ja UpdatedDate-entiteetit, kuten seuraavassa kuvassa näkyy.
Milloin käyttää varjo-ominaisuutta?
Varjoattribuuttia voidaan käyttää kahdessa tilanteessa:
Kun et halua paljastaa tietokantasarakkeita kartoitettuihin kohteisiin, kuten yllä käsitellyssä tilanteessa. Kun et halua paljastaa vieraiden avainten attribuutteja, vaan haluat käyttää navigointiattribuutteja vain suhteiden hallintaan. Vierasavain ominaisuus on varjo-ominaisuus ja se kuvataan tietokantasarakkeeseen, mutta sitä ei paljasteta entiteettinä ominaisuutena. (EF Coressa, jos et määrittele vierasavaimen ominaisuutta entiteettiluokassa, se generoi automaattisesti varjo-ominaisuuden tälle.) Sinun ei tarvitse manuaalisesti määrittää vierasnäppäinten ominaisuuksia. )
Varat:
Hyperlinkin kirjautuminen on näkyvissä.
Hyperlinkin kirjautuminen on näkyvissä.
|