0% au considerat acest document util (0 voturi)
22 vizualizări18 pagini

_.NET

.NET Framework este o platformă pentru dezvoltarea aplicațiilor Windows, în timp ce .NET Core permite crearea de aplicații cross-platform. Comparativ, .NET Core oferă performanțe mai bune și flexibilitate în implementare, dar nu suportă aplicații desktop. Conceptul de programare orientată pe obiecte (POO) este esențial, incluzând moștenirea, polimorfismul, abstractizarea și incapsularea, care îmbunătățesc modularitatea și securitatea codului.

Încărcat de

cosminadumitrita
Drepturi de autor
© All Rights Reserved
Respectăm cu strictețe drepturile privind conținutul. Dacă suspectați că acesta este conținutul dumneavoastră, reclamați-l aici.
Formate disponibile
Descărcați ca DOCX, PDF, TXT sau citiți online pe Scribd
0% au considerat acest document util (0 voturi)
22 vizualizări18 pagini

_.NET

.NET Framework este o platformă pentru dezvoltarea aplicațiilor Windows, în timp ce .NET Core permite crearea de aplicații cross-platform. Comparativ, .NET Core oferă performanțe mai bune și flexibilitate în implementare, dar nu suportă aplicații desktop. Conceptul de programare orientată pe obiecte (POO) este esențial, incluzând moștenirea, polimorfismul, abstractizarea și incapsularea, care îmbunătățesc modularitatea și securitatea codului.

Încărcat de

cosminadumitrita
Drepturi de autor
© All Rights Reserved
Respectăm cu strictețe drepturile privind conținutul. Dacă suspectați că acesta este conținutul dumneavoastră, reclamați-l aici.
Formate disponibile
Descărcați ca DOCX, PDF, TXT sau citiți online pe Scribd

1.) .

NET Framework

O platforma pt. construirea de aplicatii Windows, care foloseste clase, biblioteci si API-uri
pentru a construi, implementa si rula servicii web si diferite aplicatii si care accepta modelul
de programare orientat pe obiecte.

2.) .NET Core

Este folosit pentru a crea aplicatii cross-platform in Cloud, care ruleaza pe Windows, Mac si
Linux.

3.) .NET Core vs. .NET Framework

.NET Core este mai bun dpdv al performantei si scalabilitatii

.NET Core permite programatorilor sa creeze, testeze si sa faca deploy aplicatiilor direct in
Cloud.

Ambele folosesc NuGet, sunt Open source, oferite de Microsoft.

.NET Core nu permite dezvoltarea aplicatiilor desktop, dar este mult mai util pt crearea de
aplicatii Web, [Link] Core apps si Universal Windows Platform apps.

.NET Framework suporta WPF, Windows Froms si [Link].

.NET Core este mai flexibil pt deployment.

.NET Core permite dezvoltarea de aplicatii mobile = Xamarin.

.NET Core suporta REST API services si Microservices.

4.) IEnumerable vs. IQueryable

IEnumerable cand este folosit, aduce interogarea local, cu toate datele; daca se pune o
conditie, se pune local, pe toate datele deja aduse.

IQueryable are o eficienta mai mare, pentru ca interogarea se face in sql, conditia pusa
aduce datele deja filtrare local.

5.) Care sunt componenetele improtante ale .NET?

Biblioteca de clase si CLR = Runtime de limbaj comun = una dintre cele mai importante
componente, care ofera blocuri pentru mai multe aplicatii.

6.) Ce este Cod gestionat si Cod necontrolat/neadministrat?

Cod gestionat = codul gestionat de CLR, care ruleaza in interiorul CLR.


Cod necontrolat = orice cod care nu depinde de CLR pentru executie, dezvoltat in orice alt
limbaj indepenedent de cadrul .NET, care foloseste propriul mediu de rulare pentru
compilare si executie.

7.) Ce este Globalizarea si Localizarea?

Internationalizarea = procesul de proiectare a aplicatiilor care accepta mai multe limbi, fiind
impartita in Globalizare si Localizare.

Globalizare = dezvoltarea de aplicatii pentru a sprijini diferite limbi si culturi.

Localizare = utilizata pentru localizarea continutului aplicatiei (cuvinte cheie folosite :


IHtmlLocalizer, IStringLocalizer, IViewLocalizer).

8.) Ce e un colector de gunoi?

O caracteristica .NET pentru a elibera obiectele de cod neutilizate din memorie.

O metoda folosita pentru asta este Dispose() sau delete.

9.) Concepte POO

POO = foloseste clase si obiecte pentru a crea modele bazate pe elemente din lumea reala.
Aceste obiecte sunt capabile sa trimita mesaje = date, sa primeasca mesaje = date si sa le
proceseze.

Scopul POO este de a incerca sa creasca flexibilitatea si mentenabilitatea programelor,


pentru ca ne permite sa cream clase si obiecte care modeleaza elemente din lumea reala.

10.) Din ce e compus POO?


- Obiecte
- Clase
- Mostenirea (claselor)
- Polimorfism
- Abstractizarea (claselor)
- Incapsularea (claselor)

Obiecte si Clase:

Un obiect = o instanta a unei clase care contine toate campurile din acea clasa; este creat dintr-o
clasa.

O clasa = o colecție de câmpuri și metode(functii) care operează pe câmpuri, iar accesul la


acestea se face prin specificatori de acces; un template pentru obiecte.

Class: Fruit Object: Apple, Banana, Mango etc


11.) Clasa, interfata, clasa statica/abstracta – interfata

Interfata = are metode complet abstracte, adică metode cu nimeni.

Diferența între clasă și interfață:

- o clasă poate fi instantanată (are c-tor), dar o interfață nu poate fi niciodată


instanțiată (nu contine niciodata constructori)
- o clasa se declara prin cuvantul cheie class, iar o interfata prin interface
- metodele declarate in interiorul unei interfete sunt abstracte si nu efectueaza nicio
actiune
- membrii unei clase pot fi publici, privati sau protejati, iar ai unei interfete sunt
intotdeauna publici, deoarece trebuie sa fie accesati de clasele care le
implementeaza
- o interfata defineste doar ce trebuie sa faca o clasa, poate fi implementata de mai
multe clase, iar clasele care o implementeaza trebuie sa defineasca toate metodele
din interiorul ei
- o interfata poate mosteni o alta interfata folosinf cuv. Extinde, iar metodele din
interiorul unei interfete trebuie sa fie intotdeauna publici
- o clasa poate implementa mai multe interfete, dar poate extinde doar o super-clasa,
iar o interfata poate extinde mai multe interfete, dar nu poate implementa niciuna
- o clasă se foloseste când se defineste modul în care se face o sarcina, o interfață se
foloseste atunci când știm ce sarcină trebuie făcută

Clase statice:

- nu pot fi create obiecte ale clasei statice


- membrii trebuie declarați static
- conțin o colecție de metode statice
- o clasă statica poate avea doar un constructor static

O metoda statica – poate fi accesata fara crearea unui obiect al clasei.

O metoda publica – poate fi accesata doar de obiecte.

Constructor

- o metoda speciala folosita la initializarea unui obiect;


- are acelasi nume ca al clasei;
- nu returneaza nimic;
- este apelat cand un obiect este creat;
- toate clasele au un c-tor default, creat automat;
- pot fi supraincarcati prin utlizarea unui numar variabil de parametri;
12.) Mostenirea:

Ne ofera posibilitatea de a folosi campurile si metodele unei clase parinte, intr-o clasa copil.

Dacă nu se vrea ca alte clase să moștenească dintr-o clasă, se utilizeaza cuvântul cheie
sealed.

Avem o clasa parinte X = clasa de baza/super-clasa, care va fi mostenita de o clasa copil Y,


adica clasa copil va imprumuta metodele si clasele existente din clasa parinte.

Ex:
public class Person
{
private string _gender;

public string Gender


{
get { return this._gender; }
set { this._gender = value; }
}

public Person(string gender)


{
this._gender = gender;
}
}

public class Women : Person


{
private int _age;
public Women(string gender, int age) : base(gender)
{
this._age = age;
}

public int Age


{
get { return this._age; }
set { this._age = value; }
}
}

Base din c-tor clasei Women = indica faptul ca trebuie utilizata clasa de baza (Person) si ca permite
accesul la metodele, constructorii si variabilele sale.

Folosind base() = putem apela constructorul clasei People.

Folosind [Link](...) = putem apea o metoda din clasa People, ii putem oferi parametri si
putem utiliza rezultatele acesteia.

Folosind [Link](...) = putem obtine valoarea unei variabile membru din clasa de baza sau ii
putem atribui o valoare diferita.

13.)Polimorfismul:
A avea mai multe forme – ofera posibilitatea sa folosim metodele mostenite sub mai multe forme
pentru a obtine rezultate diferite (astfel codul devine mai flexibil). Acest lucru ne permite să
efectuăm o singură acțiune în moduri diferite.

Acest lucru se face prin overloading = supraincarcarea si overriding = suprascrierea.

Overloading = Supraincarcarea

Se refera la posibilitatea de a avea intr-o clasa mai multe metode cu acelasi nume, dar cu parametri
diferiti ca nume si numar si implementari diferite.

O clasa poate supraincarca metodele mostenite; constructorii pot fi supraincarcati.

public class Person


{
public virtual void Show()
{
[Link]("Age: " + Age, "Gender: " + Gender);
}
}
public class Women : Person
{
public override void Show()
{
[Link]("Age: " + Age, "Gender: " + Gender);
}

public void Show(int age)


{
if(Age > age)
[Link]("Higher");
else
[Link]("Lower");
}
}

Overriding = Suprascrierea

Metodele mostenite dintr-o clasa de baza si declarate ca virtuale pot fi suprascrise => codul sursa din
clasa de baza este ignorat si noul cod ii ia locul.

Metodele din clasa de baza nu sunt modificate.

Se pot suprascrie doar metodele vizibile = public/protected. Constructorii si Metodele de tip


static/final nu pot fi suprascrise.

O metoda din clasa copil poate suprascrie metoda din clasa parinte daca are acelasi tip de return si
aceeasi semnatura (nume si parametri).

public class Person


{
protected virtual void ShowName(string fname, string lname)
{
[Link](fname + " " + lname);
}
}
public class Women : Person
{
protected override void ShowName(string fname, string lname)
{
[Link](fname);
}
}

14.)Abstractizarea:

Ascunderea anumitor elemente care compun clasele (aspecte de detaliu) si punerea in evidenta a
informatiilor esentiale pentru utilizator. Se poate face prin clase abstracte/interfete.

Cuvântul cheie abstract este folosit pentru clase și metode:

Clasa abstracta: este o clasa restrictionata care nu poate fi folosita pentru a crea obiecte (pentru a o
accesa, trebuie mostenita de la o alta clasa).

Metoda abstractă: poate fi folosită doar într-o clasă abstractă și nu are corp. Corpul este furnizat de
clasa derivată (moștenit de la).

O clasă abstractă poate avea atât metode abstracte, cât și obișnuite:

15.)Incapsularea:

Ascundere de informatii sensibile prin atributul private de catre utilizatori – pot fi variabile,metode
sau clase.

- Ofera control mai bun asupra membrilor clasei


- Câmpurile pot fi făcute doar pentru citire(read-only) (dacă se utilizeaza doar metoda get)
sau doar pentru scriere (dacă se utilizeaza doar metoda set)
- Flexibila: programatorul poate schimba o parte a codului fără a afecta alte părți
- Securitate crescută a datelor

Pt a face acest lucru:

- Trebuie declarate campuri/variabile ca private;


- furnizate metode publice get și set, prin proprietăți, pentru a accesa și actualiza valoarea
unui câmp privat

O proprietate – este ca o combinatie de variabile si metode si are 2 metode:get si set.


Avantajele POO:

- Modularitatea = codul sursa pentru o clasa poate fi scris si mentinut independent de codul
sursa pentru alte clase.
- Securitatea ridicata la nivel de cod = interactionand doar cu metodele obiectului, detaliile
implementarii interne raman ascunse de lumea exterioara.
- Reutilizarea codului = daca o clasa exista deja, putem utiliza obiecte din acea clasa.
- Debugging mai usor = daca un anumit obiect este o problema, se poate elimina din program
si putem adauga/conecta, ca inlocuitor un alt obiect. De ex. daca la un telefon se strica husa,
se inlocuieste.

16.)Internal, protected, public, private = modificatori de acces

Public = accesibil din interiorul si exteriorul clasei

Protected = din interiorul clasei si a claselor derivate

Internal = accesibil din exteriorul clasei dar numai in cadrul assembly-ului (proiectului in VS)

Protected internal = din interiorul clasei si a claselor derivate dar numai in cadrul assembly-ului
(proiectului in VS)

Private = doar din interiorul clasei; Este folosit la incapsulare.

17.)Diferenta dintre class si struct

La clase se folosesc modificatori de acces (private/public etc), la structura modificatorii de acces pot
fi doar publici

18.)Transmitere prin referinta = tipurile refernita sunt definite de programator (clasa, interfata,
array).

Initial ele sunt NULL si trebuie alocata memorie pentru obiectele propriu-zise.

19.)Transmitere prin valoare = tipurile valoare (byte, float, int, enum, struct); declararea unei
variabile implica alocare de spatiu.

La declarare ele contin valoarea specifica tipului, iar la atribuire se face o copie a datelor in variabila
destinatie.
20.)Diferenta dintre clasa abstracta – interfata

Clasa abstracta – se declara prin cuvantul cheie abstract, poate fi extinsa, nu poate fi initializata
(asemenea unei clase parinte).

Interfata – se declara prin cuvantul cheie interface, e implementata de alte clase.

O interfață descrie doar comportamentul. În consecință, nu putem implementa gettere și setari în


interiorul unei interfețe. Aceasta este natura interfețelor: sunt necesare pentru a lucra cu
comportament, nu cu stare.

21.)Exceptii

Un obiect care incapsuleaza informatii despre o eroare de executie.

Cuv cheie pentru tratarea exceptiilor sunt try, catch, finally, throw.

Aruncarea exceptiilor se face cu throw.

try
{
//in this block exception may get thrown
Throw new Exception();
}

Catch(Exception)
{
//handle exception
}

finally
{
//cleanup code, optionally
}

22.)Sincron/Asincron

O metoda asincrona ruleaza sincron pana cand atinge prima expresie de asteptare, moment cand
metoda este suspendata pana cand sarcina asteptata este completa si trebuie sa contina
instructiunea await, altfel metoda se executa sincron.

23.)Ce e un Atribut?

Un fel de „eticheta” folosit pe bucati de cod. De ex. atributul Obsolete, atunci cand e folosit
semnaleaza ca, codul este invechit si nu mai trebuie folosit. (NonAction, AllowAnonymous etc).

24.)Serializare/Deserializare

Prin serializare un obiect se transforma intr-o secventa de octeti pentru a putea fi stocat si apoi
refacut = deserializare.

string event = [Link](EventData, new


JsonSerializerSettings { ContractResolver = new
JsonIgnoreVirtualContractResolver() });
var content = [Link]<EventData>(event);

25.)Recursivitatea

Functiile recursive = fac apel la ele insele din interiorul corpului lor, pentru a rezolva o problema
(Fibonaci, Factorial).

26.)Cuv cheie this

This = pointer accesibil doar in cadrul metodelor nestatice ale unei clase/structuri si indica obiectul
pentru care este apelata metoda.

27.)Atribut constant

Un atribut ce nu poate fi modificat in timpul executiei o data ce a fost initializat.

Se poate initializa doar la crearea obiectului, in lista de initializare a constructorului.

28.)Atribut static

Nu face parte din obiect, este impartit de toate obiectele clasei si nu poate fi initializat in interiorul
unei clase.

29.)Tipuri de c-tori intr-o clasa

Default = construieste un obiect initializand atributele cu valori constante, ce nu sunt primite ca


parametri.

Cu parametri = construieste un obiect cu parametrii primiti de la apelator.

De copiere = creeaza copii ale unor obiecte care sunt transmise/returnate prin valoare sau creeaza
un obiect noue, initializand atributele cu valorile altui obiect.

30.)Deferenta dintre operatorul = si c-tor de copiere

= se apeleaza pentru 2 obiecte deja existente

c-tor de copiere – creeaza obiectul si atribuie atributelor valorile altui obiect deja existent.

31.) Ce este memoria HEAP?

O portiunea de memorie unde putem aloca si dezaloca spatiu in timpul executiei.

32.)Cum se aloca spatiu de memorie in HEAP?

Folosind opertorul new.

33.)Cum se elibereaza memoria in HEAP ?

Folosind operatorul delete.

34.)Ce este un framework de clase ?


O ierarhie de clase

35.)Pot fi definite metode constante ?

NU

36.)Ce restrictii impune o clasa abstracta ?

O clasa abstracta nu poate fi instantiata.(Nu se pot crea obiecte de acel tip)

37.)In ce moment are loc efectiv supradefinirea?

In timpul executiei

38.)In ce moment are loc efectiv supraincarcarea?

La compilare

39.)Care e vizibilitatea implicita in cadrul unei structuri?

Public

40.)La ce pot fi folosite clasele abstracte ?

La derivare

41.)Care este utilitatea atributelor constante ?

Putem defini atribute ce nu vor fi modificate dupa initializare

42.)Cum se defineste o metoda care sa nu primeasca pointerul this ?

Statica

43.)[Link]

O tehnologie open-source pe partea serverului , ce permite programatorilor sa construiasca servicii,


site-uri si aplicatii web.

ASP = Pagini Active Server

44.)Gestionarea statului in [Link]

Partea de client = stocarea informatiilor in pagina/sistemul clientului; sunt obiecte simple si


reutilizabile

Partea de server = stocarea informatiilor pe server; mai usor de tinut aici, decat sa depinzi de client
pt pastrarea starii.

45.)[Link] WEB API 2


Un cadru care ajută la construirea de servicii HTTP (platforma folosita pt a construi API-uri care
rulează date și servicii), inclusiv browsere și dispozitive mobile, folosind în special C# pentru scrierea
codului și Entity Framework pentru lucrul și comunicarea cu baza de date.

Face posibilă comunicarea între [Link] și baza de date, deoarece nu include un server web.

A fost conceput ca o alternativă la Web Forms și MVC.

46.)HTTP

Este un protocol la nivel de aplicatie, cu ajutorul caruia se modifica mesajele prin modelul cerere-
raspuns.

47.)Metode HTTP

GET – ia informatia de la o resursa; daca resursa este returnata, serverul intoarce statusul 200 (OK)

POST – solicita serverului sa accepte o entitate pt a fi procesata. Serverul poate crea/nu o noua
resursa. Daca se creeaza => statusul 201 (Created)/ 202 (Accepted) si un antet de locatie care spune
clientului unde se afla resursa create. Daca nu => statusul 200 (OK)/ 204 (No Content)

PUT – solicita serverului sa inlocuiasa o resursa cu acea entitate.

Diferenta POST – PUT => prin POST se asteapta ca datele trimise sa fie prelucrate, prin PUT se
asteapta ca datele sa fie inlocuite/stocate.

DELETE – solicita serverului sa stearga o entitate

PATCH – solicita serverului sa faca o inlocuire partiala a unei entitati

TRACE – cere serverului sa returneze cererea primita; se va returna intregul corp al solicitarii + un
mesaj de diagnostic pt a se vedea care proxi-uri au trecut solicitarea

48.)Cache-ul

Stocarea temporară a datelor în memorie, astfel încât aplicația să poată accesa datele din cache în
loc să caute locația inițială. Acest lucru mărește performanța aplicației și viteza acesteia.

49.)MVC

Model View Controller = model arhitectural pt construira de aplicatii .NET, responsabil de actiunile si
operatiile pe date, autentificarea utilizatorilor, integrarea diferitelor clase care permit prelucrarea
informatiilor bazei de date.

Este inima aplicatiei, partea care nu se va schimba, comunicand cu BD externe si raspunzand la


anumite comenzi.

Model = stocheaza si recupereaza date din BD – sunt parti logice

View = componentele ce afiseaza vizualizarea aplicatie sub forma de UI – contin butoane, casete etc

Controller = se ocupa de interactiunile utilizatorilor; lucreaza cu obiectele model si view.


50.)Cum functioneaza MVC
- Mai intai, utilizatorul trebuie sa interactioneze cu interfata (ex. click pe un buton)
- Controlerul primeste actiunea si o transforma intr-o actiune ce poate fi inteleasa de Model
- Controlerul va notifica Utilizatorul daca se produce vreo modificare in Model
- Modelul este interogat de un View pt a genera o interfata adecvata
- Interfata va astepta apoi alte actiuni ale Utilizatorului, ciclul reluandu-se

51.)WebAPI vs. MVC


- Controlerul Web API este derivat din clasa [Link], iar controlerul
MVC din [Link]
- Controlerele Web API sunt specializate pe recuperarea datelor, iar cele MVC pe vizualizarea
datelor
52.)Entity Framework = un cadru ORM open source oferit de Microsoft

Este un set de tehnologii de tipul Object/Relation Mapping (ORM) care sprijina dezvoltarea de
software dezvoltat pe obiecte cu baze de date.

Permite dezvoltatorilor sa lucreze cu date relationale ca obiecte, nemaifiind nevoie de a scrie cod pt
accesul BD; astfel se trimit interogari folosind LINQ pt recuperarea si manipularea datelor.

Principalele componente ale [Link] sunt DataSet si DataProvider, concepute pt accesul si


manipularea datelor.

Arhitectura consta din:

- Data Source Specific Providers = pt abstractizarea interfetelor pt conectarea cu BD cand se


utilizeaza schema conceptuala
- Provider = specific BD care traduce comenzile de tipul entity SQL
- Parser Entity Data Model and map views = trateaza specificatiile modelului de date,
stabileste asocieri intre modelul relational = BD si cel conceptual
- Servicii metadata = gestioneaza metadatele pt entitati, relatii si mapari
- Tranzactii = sprijina capacitatile tranzactionale ale BD
- Mapping Designer Design Tools
- API = pt nivelul conceptual – expune codul
- Programming level = generare automata de cod pt clasele CLR

Pt interogarea BD si a obiectelor returnate foloseste urmatoarele:

- LINQ to Entities
- SQL Entity
- SQL native
53.)ORM = Object relational mapping

Un instrument pt stocarea de date catre BD de la obiectele de domeniu, automat.

Include 3 parti principale:

- Domain Class Objects


- Relational database objects
- Information mapping

Permite ca designul BD sa fie pastrat separat de designul clasei. Astfel aplicatia este mai usor de
intretinut si de extins.

Automatizeaza functionalitatea CRUD.

Ex. de cadre ORM : [Link], Nhibernate, Entity Framework.

54.)Sabloane de programare
- DB-centered application = db este in centrul aplicatiei
- Application centered on the DB schema
- Model -centered application – prin Code first sau Model design first

Code first = se scriu mai intai clasele si clasa derivata din DbContext pt toate entitatile necesare,
apoi se genereaza BD, tabelele etc.

Model design first = se creeaza mai intai un model de diagrama al aplicatiei si pe baza acestuia,
BD, tabelele etc.

55.)NuGet

Un manager de pachete gratuit oferit de Microsoft, preinstalat in VS si poate fi folosit din linia de
comanda.

Executa operatiile: search, installation, update, uninstall, packet restoration, managing NuGet
sources, package management, creation/publishing packages etc.

56.)AJAX

A fost un acronim pt Asincron Javascript si XML, folosit pt a returna asincron date de la server in
format XML; astazi se foloseste mai mult formatul JSON in loc de XML

57.)HTTP Client

Este o clasă care trimite și primește date de la Web API care este găzduită pe serverul web local IIS.

Clasa HttpClient oferă o clasă de bază pentru trimiterea sau primirea solicitărilor HTTP sau răspunsuri
de la o adresă URL.

58.)Data Context Layer – folosit pt comunicarea cu BD, se foloseste SqlServer si EF.

Defineste toate entitatile folosite in solutie. Se foloseste un modul DataDependencyModule.

public class DataDependencyModule : Module


{
protected override void Load(ContainerBuilder builder)
{
[Link](builder);
[Link](c => new TSClientContext())
.As<TSClientContext>()
.InstancePerLifetimeScope();
}
}
public class UserGroup
{
[Key]
[Column(Order = 1)]
public Guid UserID { get; set; }
[Key]
[Column(Order = 2)]
public Guid GroupID { get; set; }
public User User { get; set; }
public Group Group { get; set; }
}

public class TSClientContext : DbContext


{
#region Constructor
public TSClientContext()
: base("name=TSClientContext")
{
[Link]);
}
#endregion
public DbSet<Answers> Answers { get; set; }
public DbSet<Group> Groups { get; set; }
public DbSet<Questions> Questions { get; set; }
}

TSClientContext derivă din DbContext și gestionează entitatile când se executa aplicația, inclusiv
popularea date din BD, modificările efectuate, listeaza datele, fiind clasa primară care este folosită
pentru a interacționa cu datele ca obiect.

<connectionStrings>
<add name="TSClientContext" connectionString="Data
Source=(localdb)\v11.0;Integrated
Security=True;AttachDBFilename=|DataDirectory|\[Link];Integrated
Security=True" providerName="[Link]" />
</connectionStrings>

Data Annotations = se bazeaza pe atributele aplicate pe entitati in contextul bazei de date.

public class User


{
[Key]
public Guid ID { get; set; }
[Display(Name = "First Name")]
public string FirstName { get; set; }
public string LastName { get; set; }
[Required]
public string UserName { get; set; }
//Encrypt and decrypt password
[Column("Password")]
public string EncryptedPassword
{
get { return _password; }
set { _password = value; }
}
[Required]
[NotMapped]
[DataType([Link])]
[RegularExpression("^[a-zA-Z0-9_.-]+$")]
public String Password
{
get { return _encryptedData.Decode(EncryptedPassword); }
set { EncryptedPassword = _encryptedData.Encode(value); }
}
[Required]
[NotMapped]
[DataType([Link])]
public String Email
{
get { return _encryptedData.Decode(EncryptedEmail); }
set { EncryptedEmail = _encryptedData.Encode(value); }
}
[Required]
[NotMapped]
[DataType([Link])]
public String Phone
{
get { return _encryptedData.Decode(EncryptedPhone); }
set { EncryptedPhone = _encryptedData.Encode(value); }
}
public bool Enable { get; set; }
public virtual ICollection<UserUniversity> UserUniversity
{
get; set;
}
}

Key – folosit pt a specifica ca este o cheie primara in BD.

Display – folosit pt a afisa un nume diferit fata de cel din BD.

Required – este necesar; daca este null, nu se va inregistra in BD.

NotMapped – folosit cand nu se doreste crearea unei coloane in BD.

DataType – folosit pt a specifica tipul de date al unei coloane.

RegularExpression – folosit cand se defineste o regula pe o coloana, iar coloana trebuie sa


indeplineasca expresia.

Column– folosit pt a configura numele coloanei, tipul de date si ordinea in tabelul BD.

StringLength – folosit pt a specifica dimensiunea maxima a unei coloane de tipul string.

Index –se creeaza un index unic pe coloana Nume din BD.

DefaultValue–specifica valoarea implicita pt proprietatea Parent.

ForeignKey–folosit pt a configura o cheie straina intre 2 tabele.

CONFIGURE ONE-TO-MANY RELATIONSHIPS

public class StatisticAnswers


{
[Key]
[Column(Order = 1)]
public Guid QuestionsID { get; set; }
[Key]
[Column(Order = 2)]
public Guid AnswersID { get; set; }
public string answers { get; set; }
public int value { get; set; }
}
public class Answers
{
public Answers()
{
[Link] = new HashSet<StatisticAnswers>();
}
[Key]
public Guid ID { get; set; }
public [Link] UserID { get; set; }
public SetType SetType { get; set; }
public [Link] User_who_answer_ID { get; set; }
public virtual ICollection<StatisticAnswers> StatisticAnswers
{
get;
set;
}
}

CASCADE DELETE

Ștergerea în cascadă șterge automat înregistrările dependente sau setează null la ForeignKey-ul unei
coloane atunci când înregistrarea părinte este ștearsă din BD.

CODE-BASED MIGRATION

Migrarea bazată pe cod oferă mai mult control asupra migrării.


Pentru a utiliza migrarea bazată pe cod, trebuie să se execute următoarele comenzi în Consola
Manager de pachete din VS:
- Enable-Migrations: Activează migrarea în proiect prin crearea unei clase de configurare
derivată din DbMigrationsConfiguration.
DbMigrationsConfiguration<[Link]>
{
public Configuration()
{
AutomaticMigrationsEnabled = false;
}
protected override void Seed([Link] context)
{
//This method will be called after migrating to the latest
version.
//You can use the DbSet<T>.AddOrUpdate() helper extension
method
//to avoid creating duplicate seed data.
}
}
- Add-Migration: Creează o nouă clasă de migrare conform numelui specificat cu metodele
Up() și Down().
Metoda Up() conține cod pentru crearea obiectelor bazei de date
Metoda Down() conține cod pentru eliminarea sau ștergerea obiectelor bazei de date

public partial class initial : DbMigration


{
public override void Up()
{
CreateTable(
"[Link]",
c => new
{
ID = [Link](nullable: false),
UserID = [Link](nullable: false),
SetType = [Link](nullable: false),
User_who_answer_ID = [Link](nullable: false),
})
.PrimaryKey(t => [Link]);
CreateTable(
"[Link]",
c => new
{
QuestionsID = [Link](nullable: false),
AnswersID = [Link](nullable: false),
answers = [Link](),
value = [Link](nullable: false),
})
.PrimaryKey(t => new { [Link], [Link] })
.ForeignKey("[Link]", t => [Link], cascadeDelete:
true)
.ForeignKey("[Link]", t => [Link], cascadeDelete:
true)
.Index(t => [Link])
.Index(t => [Link]);
}
public override void Down()
{
DropForeignKey("[Link]", "AnswersID",
"[Link]");

DropIndex("[Link]", new[] { "Parent_ID" });


DropIndex("[Link]", new[] { "StatisticsID" });

DropTable("[Link]");
DropTable("[Link]");

} }

- Update-Database: Execută ultimul fișier de migrare creat de comanda Add-Migration și


aplică modificări schemei BD.
Folosind opțiunea –verbose se pot vizualiza instrucțiunile SQL aplicate pe BD.
În acest moment, baza de date va fi creată sau actualizată.
Ori de câte ori clasele sunt schimbate, se va executa comanda Add-Migration cu parametrul
name to; se creaza un nou fișier de migrare.
Apoi se va executa comanda Update-Database pentru aplicarea modificărilor pe BD.

S-ar putea să vă placă și