Varjuomadused on omadused, mis ei ole määratletud .NET entiteedi klassis, kuid mis on määratletud selle üksuse tüübi jaoks EF Core mudelis. Nende atribuutide väärtused ja olekud hoitakse ainult muudatuste jälgijas. Varjutatud omadused on kasulikud, kui andmebaasis olevad andmed ei tohiks olla kuvatavad kaardistatud entiteedi tüübil. Entity Frameworki tuum tutvustab uut tüüpi atribuudi nimega "varju" atribuut, mida EF 6.x-s ei ole.
Varju atribuut seal ei ole. .NET üksuste klassid. Selle asemel saad selle konfigureerida konkreetse entiteedi tüübi jaoks entiteedi andmemudelis. Seda saab konfigureerida kontekstiklassi OnModelCreating() meetodis.
Järgmine diagramm illustreerib varju atribuuti.
Nagu ülaloleval pildil näha, ei kuulu varju atribuut sinu entiteediklassi. Seetõttu ei saa sa sellele ligi pääseda, kui pääsed ligi mõne üksuse teistele omadustele. Varjutatud omadusi saab konfigureerida ainult entiteeditüüpide jaoks entiteedi andmemudeli loomisel ning need kaardistatakse ka andmebaasi veergudega. Varju omaduse väärtus ja seisund säilivad ainult muutuste jälgijas.
Vaatame varjuomaduste praktilisi aspekte. Oletame, et peame säilitama iga kirje loomise ja uuendamise kuupäevad andmebaasitabelis. Sa õppisid, kuidas määrata entiteetide loomise ja muutmise kuupäevi EF Core'is, määratledes entiteetklassis CreatedDate ja UpdatedDate omadused. Siin näeme, kuidas saavutada sama tulemust, kasutades varjuomadusi, mitte varjuomadusi entiteetklassi lisades.
Võtame arvesse järgmisi õpilaste üksuse klasse.
Ülaltoodud õpilasklassCreatedDate ja UpdatedDate atribuudid ei ole kaasatudet hoida aega, millal see loodi või uuendati. Konfigureerime need varjatud omadustena õpilasüksuses.
Määratle varjuomadused
Saad kasutada OnModelCreating() meetodit, et määratleda varjuomadused entiteettüüpide jaoks Fluent API abil.
Järgmine konfiguratsioon konfigureerib kaks varjutatud omadust, CreatedDate ja UpdatedDate, üliõpilasüksuse jaoks.
Nagu näha, kasutatakse Property() meetodit varju omaduste seadistamiseks. Määra varju omaduse nimi stringina ja tüüp üldise parameetrina. Kui Property() meetodis määratud nimi kattub olemasoleva omaduse nimega, seadistab EF Core selle olemasoleva omaduse varjuomaduseks, selle asemel et lisada uut varjuomadust.
Varjuomadused andmebaasis
Kui varju omadused on määratletud, peame uuendama andmebaasi skeemi, kuna varju omadused kaardistatakse vastavate andmebaasi veergudega.
Selleks lisa andmebaasi migratsioon Visual Studio Package Manager konsoolis järgmise käsu abil.
Õpilaste tabel sisaldab nüüd kahte veergu: CreatedDate ja UpdatedDate SQL Serveris, nagu allpool näidatud.
Nii et isegi kui me neid omadusi Studenti klassi ei lisa ega konfigureeri neid varjuomadusteks, on andmebaasis vastavad veerud.
Juurdepääs varjatud varale
Sa saad kasutada Property() meetodit, et saada või määrata varju omaduse väärtus EntityEntrys. Järgmine kood pääseb ligi varju omaduse väärtusele.
Meie stsenaariumis tahame aga automaatselt määrata need varjuomadused SaveChanges() meetodil, et ei peaks neid käsitsi iga objekti puhul määrama. Seega tühista SaveChanges() meetod kontekstiklassis, nagu allpool näidatud.
See määrab automaatselt väärtused CreatedDate ja UpdatedDate varju omadustele.
Nüüd käivita järgmine kood ja kontrolli andmebaasi kirjeid.
Ülaltoodud kood lisab järgmised kirjed CreatedDate ja UpdatedDate for Students kategooriatesse.
Nii et varju omaduste seadistamisel ei pea me neid entiteediklassi lisama.
Seadista varjuomadused kõigil entiteetidel
Selle asemel, et käsitsi seadistada varjuomadusi kõigile entiteetidele korraga, saad neid käsitsi seadistada.
Näiteks saame konfigureerida kõik eelmisel korral CreatedDate ja UpdatedDate üksused, nagu näidatud järgmisel pildil.
Millal kasutada varju omadust?
Varju atribuuti saab kasutada kahes olukorras:
Kui sa ei soovi andmebaasi veerge kaardistatud üksustel avada, nagu eespool kirjeldatud stsenaariumis. Kui sa ei taha välisvõtmete atribuute avada, vaid kasutada navigeerimisatribuute ainult suhete haldamiseks. Võõrvõtme omadus on varjatud omadus ja kaardistatakse andmebaasi veerule, kuid seda ei paljastata objekti omadusena. (EF Core'is, kui sa ei defineeri võõrvõtme omadust entiteedi klassis, genereerib see automaatselt selle jaoks varjuomaduse.) Võõrvõtmete omadusi pole vaja käsitsi seadistada. )
Ressursse:
Hüperlingi sisselogimine on nähtav.
Hüperlingi sisselogimine on nähtav.
|