Ēnas rekvizīti ir rekvizīti, kas nav definēti .NET entītiju klasē, bet ir definēti šim entītijas tipam EF Core modelī. Šo atribūtu vērtības un stāvokļi tiek saglabāti tikai izmaiņu izsekotājā. Ēnotie rekvizīti ir noderīgi, ja datu bāzes datus nedrīkst parādīt kartētajā entītijas tipā. Entītiju struktūras kodols ievieš jauna veida atribūtu, ko sauc par "ēnas" atribūtu, kas EF 6.x neeksistē.
Ēnas atribūta tur nav. .NET entītiju klases. Tā vietā to var konfigurēt noteiktam entītijas tipam entītijas datu modelī. To var konfigurēt konteksta klases metodē OnModelCreating().
Tālāk esošajā diagrammā ir parādīts ēnas atribūts.
Kā parādīts iepriekš redzamajā attēlā, ēnas atribūts nepieder jūsu entītiju klasei. Tāpēc tai nevar piekļūt, piekļūstot citiem entītijas rekvizītiem. Ēnotos rekvizītus var konfigurēt tikai entītiju tipiem, veidojot entītijas datu modeli, un tie tiks kartēti arī uz datu bāzes kolonnām. Ēnas rekvizīta vērtība un stāvoklis tiek saglabāts tikai izmaiņu izsekotājā.
Sapratīsim ēnu īpašību praktiskos aspektus. Pieņemsim, ka mums ir jāsaglabā katra datu bāzes tabulas ieraksta izveides un atjaunināšanas datumi. Jūs uzzinājāt, kā iestatīt EF Core entītiju izveides un modificēšanas datumus, entītiju klasē definējot rekvizītus CreatedDate un UpdatedDate. Šeit mēs redzēsim, kā sasniegt to pašu rezultātu, izmantojot ēnu īpašības, nevis iekļaujot ēnu īpašības entītiju klasē.
Apsveriet tālāk norādītās studentu vienību klases.
Iepriekš minētā studentu klaseAtribūti CreatedDate un UpdatedDate nav iekļauti, lai saglabātu laiku, kad tas tika izveidots vai atjaunināts. Mēs tos konfigurējam kā ēnas rekvizītus entītijā Students.
Ēnas rekvizītu definēšana
Varat izmantot metodi OnModelCreating(), lai definētu ēnu rekvizītus entītiju tipiem, izmantojot Fluent API.
Tālāk norādītajā konfigurācijā entītijai Students tiek konfigurēti divi ēnoti rekvizīti CreatedDate un UpdatedDate.
Kā redzat, ēnu rekvizītu konfigurēšanai tiek izmantota metode Property(). Norādiet ēnas rekvizīta nosaukumu kā virkni un tipu kā vispārēju parametru. Ja metodē Property() norādītais nosaukums atbilst esoša rekvizīta nosaukumam, EF Core konfigurēs esošo rekvizītu kā ēnu rekvizītu, nevis ieviesīs jaunu ēnu rekvizītu.
Ēnu rekvizīti datu bāzē
Kad ēnu rekvizīti ir definēti, mums ir jāatjaunina datu bāzes shēma, jo ēnu rekvizīti tiks kartēti uz atbilstošajām datu bāzes kolonnām.
Lai to izdarītu, pievienojiet datu bāzes migrāciju Visual Studio pakotņu pārvaldnieka konsolē, izmantojot tālāk norādīto komandu.
Tabulā Students tagad būs iekļautas divas kolonnas, CreatedDate un UpdatedDate SQL Server, kā parādīts tālāk.
Tātad, pat ja mēs neiekļausim šos rekvizītus studentu klasē un nekonfigurēsim tos kā ēnu rekvizītus, datu bāzē būs atbilstošās kolonnas.
Piekļuve ēnas rekvizītam
Varat izmantot metodi Property(), lai iegūtu vai iestatītu ēnas rekvizīta vērtību programmā EntityEntry. Tālāk norādītais kods piekļūst ēnas rekvizīta vērtībai.
Tomēr mūsu scenārijā mēs vēlamies automātiski iestatīt vērtības uz šiem ēnu rekvizītiem SaveChanges() metodē, lai mums tās nebūtu manuāli jāiestata katram entītijas objektam. Tātad, ignorējiet SaveChanges() metodi konteksta klasē, kā parādīts tālāk.
Tādējādi automātiski tiks iestatītas ēnas rekvizītu CreatedDate un UpdatedDate vērtības.
Tagad izpildiet šādu kodu un pārbaudiet ierakstus datu bāzē.
Iepriekš minētais kods ievietos šādus ierakstus CreatedDate un UpdatedDate studentiem.
Tātad, konfigurējot ēnu rekvizītus, mums tie nav jāiekļauj entītiju klasē.
Ēnu rekvizītu konfigurēšana visās entītijās
Tā vietā, lai manuāli konfigurētu ēnu rekvizītus visās entītijās vienlaikus, varat tos konfigurēt manuāli.
Piemēram, mēs varam konfigurēt visas CreatedDate un UpdatedDate entītijas pēdējo reizi, kā parādīts nākamajā attēlā.
Kad izmantot ēnu rekvizītu?
Ēnu atribūtu var izmantot divās situācijās:
Ja nevēlaties parādīt datu bāzes kolonnas kartētās entītijās, piemēram, iepriekš aprakstītajā scenārijā. Ja nevēlaties atklāt ārējās atslēgas atribūtus, bet vēlaties izmantot tikai navigācijas atribūtus, lai pārvaldītu relācijas. Ārējās atslēgas rekvizīts būs ēnas rekvizīts un tiks kartēts uz datu bāzes kolonnu, bet netiks parādīts kā entītijas rekvizīts. (EF Core, ja entītiju klasē nedefinējat ārējās atslēgas rekvizītu, tas automātiski ģenerēs ēnu rekvizītu.) Ārējās atslēgas rekvizīti nav manuāli jākonfigurē. )
Resursu:
Hipersaites pieteikšanās ir redzama.
Hipersaites pieteikšanās ir redzama.
|