- 10.01.2021
- 4 minute de citit
-
-
A
-
r
-
d
-
b
-
s
-
In acest articol
O cheie serveste ca un identificator unic pentru fiecare instanta de entitate. Majoritatea entitatilor din EF au o singura cheie, care se mapeaza la conceptul de cheie primara in bazele de date relationale (pentru entitati fara chei, consultati entitati fara cheie). Entitatile pot avea chei suplimentare dincolo de cheia principala (consultati Chei alternative pentru mai multe informatii).
Configurarea unei chei primare
Prin conventie, o proprietate numita Id sau <nume tip> Id va fi configurata ca cheie primara a unei entitati.
clasa interna Car {public string Id {get; a stabilit; } sir public Make {get; a stabilit; } sir public Model {get; a stabilit; }} clasa interna Truck {public string TruckId {get; a stabilit; } sir public Make {get; a stabilit; } sir public Model {get; a stabilit; }}
Nota
Tipurile de entitati detinute folosesc reguli diferite pentru a defini cheile.
Puteti configura o singura proprietate pentru a fi cheia principala a unei entitati dupa cum urmeaza:
- Adnotari de date
- API fluent
clasa interna Car {[Cheie] sir public LicensePlate {get; a stabilit; } sir public Make {get; a stabilit; } sir public Model {get; a stabilit; }}
De asemenea, puteti configura mai multe proprietati pentru a fi cheia unei entitati – aceasta este cunoscuta sub numele de cheie compusa. Tastele compozite pot fi configurate numai folosind Fluent API; conventiile nu vor configura niciodata o cheie compusa si nu puteti utiliza Adnotari de date pentru a configura una.
override protected void OnModelCreating (ModelBuilder modelBuilder) {modelBuilder.Entity <Car> () .HasKey (c => new {c.State, c.LicensePlate}); }
Generarea de valoare
Pentru cheile numerice necompuse si primare GUID, EF Core seteaza generarea de valoare prin conventie. De exemplu, o cheie primara numerica in SQL Server este configurata automat pentru a fi o coloana IDENTITATE. Pentru mai multe informatii, consultati documentatia privind generarea de valoare.
Numele cheii principale
Prin conventie, pe bazele de date relationale cheile primare sunt create cu numele PK_ <nume tip>. Puteti configura numele constrangerii cheii principale astfel:
override protected void OnModelCreating (ModelBuilder modelBuilder) {modelBuilder.Entity <Blog> () .HasKey (b => b.BlogId) .HasName (“PrimaryKey_BlogId”); }
Tipuri si valori cheie
In timp ce EF Core accepta utilizarea proprietatilor de orice tip primitiv ca cheie primara, inclusiv sir, Guid, octet [] si altele, nu toate bazele de date accepta toate tipurile ca chei. In unele cazuri, valorile cheii pot fi convertite automat intr-un tip acceptat, altfel conversia trebuie specificata manual.
Proprietatile cheie trebuie sa aiba intotdeauna o valoare non-implicita atunci cand se adauga o noua entitate in context, dar unele tipuri vor fi generate de baza de date. In acest caz, EF va incerca sa genereze o valoare temporara atunci cand entitatea este adaugata in scopuri de urmarire. Dupa ce se numeste SaveChanges, valoarea temporara va fi inlocuita cu valoarea generata de baza de date.
Important
Daca o proprietate cheie are valoarea generata de baza de date si se specifica o valoare non-implicita atunci cand se adauga o entitate, atunci EF va presupune ca entitatea exista deja in baza de date si va incerca sa o actualizeze in loc sa introduca una noua. Pentru a evita acest lucru, dezactivati generarea de valoare sau vedeti cum sa specificati valorile explicite pentru proprietatile generate.
Taste alternative
O cheie alternativa serveste ca un identificator unic alternativ pentru fiecare instanta de entitate in plus fata de cheia primara; poate fi folosit ca tinta a unei relatii. Atunci cand utilizati o baza de date relationala, aceasta se aplica conceptului de index / constrangere unic pe coloana (coloanele) cheii alternative si una sau mai multe constrangeri ale cheii straine care fac referire la coloana (coloane).
Bacsis
Daca doriti doar sa impuneti unicitatea pe o coloana, definiti mai degraba un index unic decat o cheie alternativa (consultati indexuri). In EF, cheile alternative sunt doar in citire si ofera semantica suplimentara peste indexuri unice, deoarece pot fi utilizate ca tinta a unei chei straine.
Taste alternative sunt de obicei introduse pentru dvs. atunci cand este necesar si nu este nevoie sa le configurati manual. Prin conventie, o cheie alternativa este introdusa pentru dvs. atunci cand identificati o proprietate care nu este cheia principala ca tinta a unei relatii.
clasa interna MyContext: DbContext {public DbSet <Blog> Bloguri {get; a stabilit; } public DbSet <Post> Postari {get; a stabilit; } protected override void OnModelCreating (ModelBuilder modelBuilder) {modelBuilder.Entity <Post> () .HasOne (p => p.Blog) .WithMany (b => b.Posts) .HasForeignKey (p => p.BlogUrl) .HasPrincipalKey (b => b.Url); }} 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; } public string BlogUrl {get; a stabilit; } public Blog Blog {get; a stabilit; }}
De asemenea, puteti configura o singura proprietate pentru a fi o cheie alternativa:
override protected void OnModelCreating (ModelBuilder modelBuilder) {modelBuilder.Entity <Car> () .HasAlternateKey (c => c.LicensePlate); }
De asemenea, puteti configura mai multe proprietati pentru a fi o cheie alternativa (cunoscuta sub numele de cheie alternativa compusa):
override protected void OnModelCreating (ModelBuilder modelBuilder) {modelBuilder.Entity <Car> () .HasAlternateKey (c => new {c.State, c.LicensePlate}); }
In cele din urma, prin conventie, indexul si constrangerea care sunt introduse pentru o cheie alternativa vor fi denumite AK_ <nume tip> _ <nume proprietate> (pentru cheile alternative compuse <nume proprietate> devine o lista separata de subliniere a numelor de proprietati). Puteti configura numele indexului cheii alternative si constrangerea unica:
override protected void OnModelCreating (ModelBuilder modelBuilder) {modelBuilder.Entity <Car> () .HasAlternateKey (c => c.LicensePlate) .HasName (“AlternateKey_LicensePlate”); }
pornostar index valentina nappi pussy
valentina nappi italian porn valentina nappi pussy
xxx sex italia valentina nappi rimming
ballerine xxx valentina nappi rocco siffredi
ragazze nel culo rotte valentina nappi rocco siffredi porn
malena tube porn valentina nappi rocco siffredi porno
italiana tettona porno valentina nappi rocco siffredi video
porno en streaming valentina nappi rocco sifredi
immagini porno malena valentina nappi salieri
porno italiano malena valentina nappi sborra
casting italian porno valentina nappi sborrata
cxc streaming valentina nappi sborrate
matt core sperma party valentina nappi scene
max felicitas sesso valentina nappi sega
lara de santis porn valentina nappi sex videos
cristina miller pornostar valentina nappi snapchat
giovani e porche valentina nappi spiaggia
salieri porn movie valentina nappi streaming
fragile 7883 porno valentina nappi strip
teen italian porn valentina nappi succhia








