• 10/09/2020
  • 3 minute de citit

In acest articol

Proprietatile umbrelor sunt proprietati care nu sunt definite in clasa de entitate .NET, dar sunt definite pentru acel tip de entitate in modelul EF Core. Valoarea si starea acestor proprietati sunt mentinute pur si simplu in Change Tracker. Proprietatile umbrelor sunt utile atunci cand exista date in baza de date care nu ar trebui expuse pe tipurile de entitati mapate.

Proprietatile indexerului sunt proprietati de tip entitate, care sunt sustinute de un indexer in clasa de entitate .NET. Acestea pot fi accesate folosind indexerul din instantele clasei .NET. De asemenea, va permite sa adaugati proprietati suplimentare la tipul de entitate fara a modifica clasa CLR.

Proprietati de umbra cu cheie straina

Proprietatile umbrelor sunt cele mai des utilizate pentru proprietatile cheii straine, in care relatia dintre doua entitati este reprezentata de o valoare a cheii straine in baza de date, dar relatia este gestionata pe tipurile de entitati utilizand proprietati de navigare intre tipurile de entitati. Prin conventie, EF va introduce o proprietate umbra atunci cand se descopera o relatie, dar nu se gaseste nicio proprietate cu cheie straina in clasa entitatii dependente.

Proprietatea va fi denumita <numele proprietatii de navigare> <numele proprietatii cheii principale> (navigarea pe entitatea dependenta, care indica catre entitatea principala, este utilizata pentru denumire). Daca numele proprietatii cheii principale include numele proprietatii de navigare, atunci numele va fi doar <numele proprietatii cheii principale>. Daca nu exista nicio proprietate de navigatie pe entitatea dependenta, atunci numele tipului principal este utilizat in locul sau.

De exemplu, urmatoarea listare a codului va duce la introducerea unei proprietati shadow BlogId entitatii Post:

clasa interna MyContext: DbContext {public DbSet <Blog> Bloguri {get; a stabilit; } public DbSet <Post> Postari {get; a stabilit; }} public class Blog {public int BlogId {get; a stabilit; } public string Url {get; a stabilit; } public list <Post> Postari {get; a stabilit; }} public class Post {public int PostId {get; a stabilit; } sir public Titlu {get; a stabilit; } sir public Continut {get; a stabilit; } // Deoarece nu exista nici o proprietate CLR care sa detina // cheia straina pentru aceasta relatie, se creeaza o proprietate umbra. public Blog Blog {get; a stabilit; }}

Configurarea proprietatilor umbrelor

Puteti utiliza API-ul Fluent pentru a configura proprietatile umbrelor. Dupa ce ati apelat supraincarcarea sirului de proprietate, puteti inlantui oricare dintre apelurile de configurare pe care le-ati face pentru alte proprietati. In exemplul urmator, deoarece Blog nu are o proprietate CLR denumita LastUpdated, este creata o proprietate umbra:

clasa interna MyContext: DbContext {public DbSet <Blog> Bloguri {get; a stabilit; } override protected void OnModelCreating (ModelBuilder modelBuilder) {modelBuilder.Entity <Blog> () .Property <DateTime> (“LastUpdated”); }} public class Blog {public int BlogId {get; a stabilit; } public string Url {get; a stabilit; }}

Daca numele furnizat metodei Proprietati se potriveste cu numele unei proprietati existente (o proprietate umbra sau una definita in clasa entitatii), atunci codul va configura acea proprietate existenta mai degraba decat introducerea unei noi proprietati umbra.

Accesarea proprietatilor umbrelor

Valorile proprietatii umbrelor pot fi obtinute si modificate prin intermediul API-ului ChangeTracker:

context.Entry (myBlog) .Property (“LastUpdated”). CurrentValue = DateTime.Now;

Proprietatile umbrelor pot fi referite in interogarile LINQ prin metoda statica EF.Property:

var blogs = context.Blogs .OrderBy (b => EF.Property <DateTime> (b, “LastUpdated”));

Proprietatile umbrei nu pot fi accesate dupa o interogare fara urmarire, deoarece entitatile returnate nu sunt urmarite de trackerul de schimbare.

Configurarea proprietatilor indexerului

Puteti utiliza API-ul Fluent pentru a configura proprietatile indexerului. Dupa ce ati apelat metoda IndexerProperty, puteti inlantui oricare dintre apelurile de configurare pe care le-ati face pentru alte proprietati. In exemplul urmator, Blogul are un indexer definit si va fi utilizat pentru a crea o proprietate de indexare.

override protected void OnModelCreating (ModelBuilder modelBuilder) {modelBuilder.Entity <Blog> () .IndexerProperty <DateTime> (“LastUpdated”); }

Daca numele furnizat metodei IndexerProperty se potriveste cu numele unei proprietati de indexare existente, atunci codul va configura acea proprietate existenta. Daca tipul de entitate are o proprietate, care este sustinuta de o proprietate din clasa de entitate, atunci se arunca o exceptie, deoarece proprietatile indexerului trebuie accesate numai prin intermediul indexerului.

Tipuri de entitati de geanta de proprietate

Nota

Suportul pentru tipurile de entitati de bagaje de proprietati a fost introdus in EF Core 5.0.

Tipurile de entitati care contin numai proprietati de indexare sunt cunoscute sub numele de tipuri de entitati de pachete de proprietati. Aceste tipuri de entitati nu au proprietati de umbra, in schimb EF va crea proprietati de indexare. In prezent, numai Dictionar <sir, obiect> este acceptat ca tip de entitate pentru pachetul de proprietati. Trebuie sa fie configurat ca un tip de entitate partajata cu un nume unic si proprietatea DbSet corespunzatoare trebuie sa fie implementata folosind un apel Set.

clasa interna MyContext: DbContext {public DbSet <Dictionar <sir, obiect >> Bloguri => Set <Dictionar <sir, obiect >> (“Blog”); protected override void OnModelCreating (ModelBuilder modelBuilder) {modelBuilder.SharedTypeEntity <Dictionar <sir, obiect >> (“Blog”, bb => {bb.Property <int> (“BlogId”); bb.Property <string> (“Url “); bb.Property <DateTime> (” Ultima actualizare “);}); }}

shona river porn film xxx italian
xxx rocco sinfredi film xxx streaming
malena luna rival filmati cento per cento
bari porno filmati centoxcento
porno moglie video filthy amateur
centoxcento. net filthy amateur
streaming angeli e demoni filthy amateur.net
famiglia porn filthy amateurs
michelle ferrari lesbian filthy porn
roberta gemma.it filthyamateur
salieri streaming filthyamateur.net
film porno 100 x 100 filty amateur
modellexxx floriana porno
malena porno italiano foto porno malena
centoxcento gratis fragile 7883
joanna bujoli porn fragile 7883 porno
omar galanti provini fragile7883
giada de vinci fragile7883 max felicitas
karma rx valentina nappi fragile7883 porno
xxx ciccione fragile7883 video