Cadrul entităților 6, stabilind o conexiune la baza de date

Când lucrăm cu cadrul entităților în toate exemplele anterioare, ne-am bazat pe convențiile Code-First pentru a determina automat conexiunea la baza de date. În mod implicit, Code-First creează o bază de date pe serverul local. \ SQLEXPRESS, utilizând numele complet al clasei de context pentru numele bazei de date (de exemplu, namespace + class name). Pentru un exemplu al proiectului nostru, aceasta înseamnă că Code-First va crea o bază de date numită CodeFirst.SampleContext. Adesea, acest comportament trebuie redefinit, în particular, am trecut numele bazei de date MyShop la constructorul claselor de context. Acest articol conține o descriere detaliată a setărilor pentru numele bazei de date și a conexiunii la acesta.







Utilizând fișierul de configurare a aplicației

Cea mai ușoară modalitate de a gestiona conexiunea la baza de date este să utilizați fișierul de configurare a aplicației. În fișierul de configurare, puteți să înlocuiți convențiile de bază ale codului primar și să specificați exact șirul de conectare la baza de date. Această abordare este utilă în special dacă doriți să modificați șirul de conexiuni în contextul dvs. pentru a specifica o conexiune la o bază de date la distanță (nu locală) atunci când aplicația este implementată.

Datorită acestei abordări, este posibilă reutilizarea modelului de date. În fiecare proiect în care ne referim la proiectul CodeFirst, putem specifica șirul de conectare, adică un model va funcționa cu diferite baze de date.

Pentru a specifica șirul de conexiune, utilizați secțiunea de configurare a conexiunii. Implicit, șirul de conectare trebuie să aibă același nume ca fișierul de context și puteți specifica atât numele complet, cât și numele scurt (adică SampleContext sau CodeFirst.SampleContext). Din acest motiv, Entity Framework găsește automat șirul de conexiune necesar în fișierul de configurare și îl folosește. Următorul exemplu prezintă definiția unui șir de conexiuni:

Rulați acest exemplu și asigurați-vă că Code-First creează o nouă bază de date numită MyShop2 pentru modelul curent. Dacă ați lucrat prin exemple din articolele anterioare, pentru moment eliminați apelul către constructorul clasei de bază din clasa context. În consecință, va fi creată următoarea bază de date:

Cadrul entităților 6, stabilind o conexiune la baza de date

Configurarea unei conexiuni într-un designer de clasă de context

Mai sus, ați văzut cum să setați șirul de conexiune din fișierul de configurare, astfel încât contextul să îl folosească automat datorită convențiilor Code-First. Acum, să aruncăm o privire asupra unor modalități de gestionare a conexiunii la baza de date din cod.

Clasa DbContext, pe lângă constructorul implicit, include mai multe versiuni de constructori supraîncărcate. Dacă utilizați unul dintre acești constructori, Code-First nu va folosi convențiile pentru a căuta automat șirul de conexiuni. Cea mai simplă versiune a constructorului din clasa DbContext ia un parametru șir. Să vedem cum să folosim acest constructor dintr-o clasă derivată:

În acest constructor, este trecut numele bazei de date sau șirul de conexiune definit complet. Cadrul de entități este suficient de inteligent pentru a face distincția între numele și șirul de conexiune, în acest exemplu specificăm numele bazei de date.







Rețineți că în acest exemplu, numim constructorul supraîncărcat al clasei DbContext de la constructorul implicit al clasei SampleContext derivate. Cu această abordare de proiectare, atunci când creați un obiect context în aplicația dvs., șirul de conectare va fi selectat automat din constructorul implicit al clasei SampleContext. Uneori este necesar să specificați un șir de conexiuni la crearea unui obiect context. Pentru a face acest lucru, puteți adăuga un constructor supraîncărcat la clasa context cu un apel către constructorul DbContext supraîncărcat:

Acum, în codul de manipulare a datelor, atunci când creați un obiect de clasă context, puteți specifica numele bazei de date sau șirului de conexiune:

Acest exemplu preia datele tuturor cumpărătorilor din tabelul Clienți din baza de date MyShop2, deoarece am specificat un șir complet de conectare la această bază de date. Dacă în acest exemplu creați un obiect context folosind constructorul implicit:

Acordul de utilizare Codul În primul rând pentru căutarea automată pentru un șir de conexiune, iar în cazul în care constată un șir de conexiune cu numele sau SampleContext CodeFirst.SampleContext, încearcă să se conecteze la o bază de date cu numele CodeFirst.SampleContext.

De asemenea, s-ar putea să vă întrebați cum să treci în mod explicit constructorul de clasă de conexiune la constructorul de clasă context dacă acesta nu se potrivește cu numele clasei de context. Pentru a face acest lucru, puteți utiliza un șir de conexiuni scurtat cu un singur parametru de nume:

Acum Code-First va arăta în fișierul de configurare pentru un șir de conexiuni numit MyConnectionStringName.

Reutilizarea conexiunii la baza de date

Una dintre versiunile supraîncărcate ale constructorului DbContext duce un obiect de conexiune DbConnection din spațiul de nume System.Data.Common. Utilizarea acestui obiect poate fi utilă dacă doriți să specificați același obiect de conexiune în mai multe obiecte de context și nu doriți să specificați de fiecare dată numele bazei de date sau al șirului de conexiune. Ie obiectul DbConnection poate fi stocat într-un anumit loc în aplicație și îl puteți referi ori de câte ori creați un obiect context. Următorul este un exemplu:

În acest exemplu, am creat clasa DbConnectionToMyShop pentru a vă conecta la baza de date MyShop. Obiectul acestei clase este trecut în constructorul clasei context implicit. De asemenea, am creat un constructor supraîncărcat pentru comoditate - în codul de aplicație puteți transfera pur și simplu obiectul de conexiune dorit. Clasele de conectare pot fi definite într-un fișier și apoi folosite în întreaga aplicație. Al doilea parametru, în acest context, constructorul OwnsConnection specifică dacă trebuie să fie curățat obiectul de conexiune atunci când obiectul context este șters.

Configurarea acordurilor de conectare în primul cod

Ultima modalitate de a gestiona conexiunea cu baza de date este de a înlocui acordurile care utilizează Code-First. Conexiunile de configurare a conexiunii sunt definite utilizând interfața IDbConnectionFactory. Puteți implementa această interfață și o puteți transmite metodei SetDefaultConnectionFactory () din clasa DbConfiguration. suprascriind astfel convențiile implicite ale Codului-Primul.

Implementarea implicită implementează clasa SqlConnectionFactory din spațiul de nume System.Data.Entity.Infrastructure. Comportamentul implicit specifică faptul că furnizorul de baze de date SQL Server este furnizorul (ansamblul System.Data.SqlClient), numele serverului -. \ SQLEXPRESS, și pentru a accesa serverul utilizând Windows-autentificare (server este disponibil pentru utilizatorul curent). Aveți posibilitatea să înlocuiți datele acordului, de exemplu, pentru a specifica în mod explicit Cadrul entităților pe care doriți să îl lucrați cu furnizorul MySQL.

Următorul exemplu arată modul de suprascriere a acestor convenții utilizând clasa de configurație moștenită din DbConfiguration:

În acest exemplu, schimbăm numele serverului și specificăm că autentificarea SQL trebuie utilizată pentru a accesa serverul, pe baza numelui de utilizator și a parolei. Rețineți că atributul DbConfigurationType este utilizat pentru a specifica clasa context pentru a utiliza această configurație. Pentru a înregistra o nouă clasă de configurare, trebuie să ștergeți secțiunea implicităConnectionFactory din fișierul Web.config al aplicației Web:

De asemenea, puteți seta configurația pentru toate clasele de contexte din aplicație și nu utilizați atributul DbConfigurationType. Pentru aceasta, specificați proprietatea codeConfigurationType din secțiunea de configurare a entitățiiFramework:

Exemplele de mai sus arată utilizarea furnizorului standard de date SQL Server, dar puteți specifica și alți furnizori de baze de date care sunt solicitați în aplicația dvs. (MySQL, Oracle etc.)







Articole similare

Trimiteți-le prietenilor: