• 11/02/2018
  • 3 minute de citit
    • A

    • g

    • r

    • b

    • s

In acest articol

Semintarea datelor este procesul de populare a unei baze de date cu un set initial de date.

Exista mai multe moduri in care acest lucru poate fi realizat in EF Core:

  • Modeleaza datele privind semintele
  • Personalizare manuala a migrarii
  • Logica de initializare personalizata

Modeleaza datele privind semintele

Spre deosebire de EF6, in EF Core, datele de insamantare pot fi asociate cu un tip de entitate ca parte a configuratiei modelului. Apoi, migratiile EF Core pot calcula automat operatiunile de inserare, actualizare sau stergere care trebuie aplicate la actualizarea bazei de date la o noua versiune a modelului.

Nota

Migratiile iau in considerare doar modificarile modelului atunci cand se determina ce operatiune ar trebui efectuata pentru a obtine datele seminte in starea dorita. Astfel, orice modificare a datelor efectuate in afara migratiilor poate fi pierduta sau poate provoca o eroare.

De exemplu, acest lucru va configura datele de baza pentru un blog in OnModelCreating:

modelBuilder.Entity <Blog> () .HasData (Blog nou {BlogId = 1, Url = “http://sample.com”});

Pentru a adauga entitati care au o relatie, trebuie specificate valorile cheii straine:

modelBuilder.Entity <Post> () .HasData (Postare noua {BlogId = 1, PostId = 1, Title = “Primul post”, Continut = “Test 1”});

Daca tipul de entitate are proprietati in stare umbra, o clasa anonima poate fi utilizata pentru a furniza valorile:

modelBuilder.Entity <Post> () .HasData (new {BlogId = 1, PostId = 2, Title = “Al doilea post”, Content = “Test 2”});

Tipurile de entitati detinute pot fi insamantate in mod similar:

modelBuilder.Entity <Post> () .OwnsOne (p => p.AuthorName) .HasData (new {PostId = 1, First = “Andriy”, Last = “Svyryd”}, new {PostId = 2, First = “Diego “, Last =” Vega “});

Vedeti exemplul complet de proiect pentru mai mult context.

Odata ce datele au fost adaugate la model, migrarile ar trebui utilizate pentru a aplica modificarile.

Bacsis

Daca trebuie sa aplicati migrari ca parte a unei implementari automate, puteti crea un script SQL care poate fi previzualizat inainte de executie.

Alternativ, puteti utiliza context.Database.EnsureCreated () pentru a crea o noua baza de date care contine datele seed, de exemplu pentru o baza de date de testare sau cand utilizati furnizorul din memorie sau orice baza de date fara relatii. Retineti ca, daca baza de date exista deja, EnsureCreated () nu va actualiza nici schema, nici datele de seminte din baza de date. Pentru bazele de date relationale nu ar trebui sa apelati EnsureCreated () daca intentionati sa utilizati Migratii.

Limitari ale datelor privind semintele modelului

Acest tip de date seminte este gestionat de migratii si scriptul pentru actualizarea datelor care sunt deja in baza de date trebuie generat fara a se conecta la baza de date. Acest lucru impune unele restrictii:

  • Valoarea cheii primare trebuie specificata chiar daca este generata de obicei de baza de date. Acesta va fi utilizat pentru a detecta modificarile datelor intre migratii.
  • Datele insamantate anterior vor fi eliminate daca cheia primara este modificata in vreun fel.

Prin urmare, aceasta caracteristica este cea mai utila pentru datele statice care nu se asteapta sa se schimbe in afara migratiilor si care nu depind de nimic altceva din baza de date, de exemplu coduri postale.

Daca scenariul dvs. include oricare dintre urmatoarele, este recomandat sa utilizati logica de initializare personalizata descrisa in ultima sectiune:

  • Date temporare pentru testare
  • Date care depind de starea bazei de date
  • Date mari (datele de insamantare sunt capturate in instantanee de migrare, iar datele mari pot duce rapid la fisiere uriase si performante degradate).
  • Date care necesita valori cheie pentru a fi generate de baza de date, inclusiv entitati care utilizeaza chei alternative ca identitate
  • Date care necesita transformare personalizata (care nu sunt gestionate de conversii de valori), cum ar fi unele hashuri de parole
  • Date care necesita apeluri catre API-uri externe, cum ar fi rolurile ASP.NET Core Identity si crearea utilizatorilor

Personalizare manuala a migrarii

Cand se adauga o migrare, modificarile la datele specificate cu HasData sunt transformate in apeluri catre InsertData (), UpdateData () si DeleteData (). O modalitate de a rezolva unele dintre limitarile HasData este sa adaugati manual aceste apeluri sau operatii personalizate la migrare.

migrationBuilder.InsertData (tabel: “Bloguri”, coloane: nou [] {“Url”}, valori: obiect nou [] {“http://generated.com”});

Logica de initializare personalizata

O modalitate simpla si puternica de a efectua insamantarea datelor este utilizarea DbContext.SaveChanges () inainte ca logica aplicatiei principale sa inceapa executarea.

folosind (var context = new DataSeedingContext ()) {context.Database.EnsureCreated (); var testBlog = context.Blogs.FirstOrDefault (b => b.Url == “http://test.com”); if (testBlog == null) {context.Blogs.Add (blog nou {Url = “http://test.com”}); } context.SaveChanges (); }

Avertizare

Codul de insamantare nu ar trebui sa faca parte din executia normala a aplicatiei, deoarece acest lucru poate cauza probleme de concurenta atunci cand se executa mai multe instante si ar necesita, de asemenea, ca aplicatia sa aiba permisiunea de a modifica schema bazei de date.

In functie de constrangerile implementarii dvs., codul de initializare poate fi executat in diferite moduri:

  • Rularea aplicatiei de initializare la nivel local
  • Implementarea aplicatiei de initializare cu aplicatia principala, invocarea rutinei de initializare si dezactivarea sau eliminarea aplicatiei de initializare.

Acest lucru poate fi automatizat de obicei utilizand profiluri de publicare.

poppe sex video malena la pugliese film
magni porno video mario salieri
veronica belli hd video martina smeraldi
streaming porn video max felicitas
xxx streaming tv video moglie che scopa
adele porn video nappi valentina
sardegna xxx video orgia italiano
giada da vinci video video poppe
ufficio porn video porno 100×100
malena la pugliese 2019 video porno addio al celibato
sperma parti video porno addio celibato
culo malena video porno andrea diprè
valentina nappi monster cock video porno bolognese
rocco kelly stafford video porno casalinga italiana
film salieri porno video porno cento xcento
infedele porn video porno centopercento
carla porno video porno centox cento
roberta gemma porno 2016 video porno centoxcento
bottadi culo video porno christie dom
anya krey porn video porno con mogli