Sunteți pe pagina 1din 5

Lucrarea 3 Medii avansate 2012

Utilizarea Entity Framework in lucrul cu modelele


Vom exemplifica utilizarea unei alternative de conectare la baza de date i de construire a modelelor utiliznd Entity Framework. Pentru simplitate se va crea un nou proiect de tipul ASP MVC 3 i o baz de date cu 2 tabele i o legtur ntre ele. 1. Creai un nou proiect File>New>Visual C# > Web>ASP MVC3 Web Application > Internet Application 2. Crem o nou baz de date: Click dreapta pe App_Data > Add > New Item > SQL Server Database 3. Deschidem noua baz de date creat n App_Data i crem tabelele clienti si localitati cu structur simplificat. (vezi lucrarea 2 Crearea bazei de date).

4. Crem legtura dintre tabela clienti i tabela localiti. (vezi lucrarea 2 Crearea relaiilor)

Lucrarea 3 Medii avansate 2012


5. Pentru a crea modelele utiliznd Data Entity Model parcurgem urmtorii pai: a. Click dreapta pe Models > Add > New Item iar din categoria Data alegem ADO.NET Entity Data Model.

b. Specificm numele n csua de text de jos i dm click pe Add. Aici am denumit magazin.edmx c. Se deschide un Data Entity Wizard, unde selectm Generate from database pentru a ne genera automat modelele, apoi dm Next.

d. Apare urmtorul pas de selectare a conexiunii la baza de date, n cazul nostru fiind magazin.mdf, se d Next. e. La urmtorul pas ni se cere s selectm obiectele care s le importe la nivelul modelelor, selectm Tables i dm Finish:

Lucrarea 3 Medii avansate 2012


Observm csua de text Model Namespace n care se specific identificatorul namespace-ului n care se vor genera clasele model. Dup ce dm Finish, n Models ni se creaz un fiier edmx care conine toate modelele, similar cu clasele LINQ din lucrarea 2 :

Si aici vom crea cte un repository pentru fiecare dintre modele ca i n lucrarea precedent: Crem n Models clasa clientirepository. Click dreapta pe Models > Add > Class. Codul afferent lucrului cu Entity Models este puin diferit fa de cel pentru LINQ:
public class clientirepository { //accesul la baza de datese face printr-un obiect Entities private magazinEntities db = new magazinEntities(); public List<clienti> GetAllClients() { var list = from clist in db.clientis select clist;//echivalent cu db.clientis return list.ToList<clienti>(); } public clienti GetClientById(int idclient) { return db.clientis.Single<clienti>(d => d.idclient == idclient); } public void AddClient(clienti client) { db.AddToclientis(client); db.SaveChanges(); } public void DeleteClient(clienti client) { db.DeleteObject(client); db.SaveChanges(); }

Lucrarea 3 Medii avansate 2012


public void Update() { db.SaveChanges(); } }

Similar cu exemplul din laboratorul precedent, pentru a testa funcionalitatea repositoriului crem un controller de Test astfel: 1. Click dreapta pe Controllers> Add > Controller TestController; 2. Adaugam urmatorul cod pentru a testa repository-ul clienti; 3. Cream un View empty simplu (nu strongly-typed) pentru Controllerul Test (click dreapta in Controller>Add View) in care adaugam codul @ViewData[msg] pentru a vedea mesajul de testare. 4. Introducem urmatorul cod in clasa controllerului Test:
public class TestController : Controller { //ATENTIE: va trebui s specificati namespace-ul Models cu clauza using // GET: /Test/ public ActionResult Index() { return View(); } //URL: localhost:[port]/Test/ShowClients public ActionResult ShowClients() { Models.clientirepository clientirepo = new Models.clientirepository(); List<Models.clienti> query = clientirepo.GetAllClients(); //interfata la o colectie de inregistrari LINQ //creare unui iterator atasat colectiei de inregistrari LINQ IEnumerator<Models.clienti> cl_list = query.GetEnumerator(); //iterarea colectiei utilizand pattern-ul de iterator while (cl_list.MoveNext()) { ViewData["msg"] = ViewData["msg"] + cl_list.Current.nume + "," + cl_list.Current.prenume + "," + cl_list.Current.adresa + "|"; } return View("Test"); } //URL: localhost:[port]/Test/InsertClient public ActionResult InsertClient() {//introduce doi clienti noi in bd Models.clientirepository clientirepo = new Models.clientirepository();

Lucrarea 3 Medii avansate 2012


//creaza instantele de clienti clienti newclient = new clienti(); newclient.nume = "Smith"; newclient.prenume = "John"; newclient.idlocalitate = 2; newclient.adresa = "Str. Test 21"; clienti newclient1 = new clienti(); newclient1.nume = "Anne"; newclient1.prenume = "Jonson"; newclient1.idlocalitate = 2; newclient1.adresa = "Str.W21 Nr 3"; //adauga clientii la repository clientirepo.AddClient(newclient); clientirepo.AddClient(newclient1); ViewData["msg"] = "Done!"; return View("Test"); } //URL: localhost:[port]/Test/UpdateClient public ActionResult UpdateClient() {//face update la clientul cu idclient=1 clientirepository clientirepo = new clientirepository(); //incarca clientul cu id-ul 1 clienti cl = clientirepo.GetClientById(1); //face schimbarile cl.nume = "Jay"; cl.prenume = "Samuel"; //salveaza schimbarile clientirepo.Update(); ViewData["msg"] = "Updated!"; return View("Test"); } //URL: localhost:[port]/Test/DeleteClient public ActionResult DeleteClient() {//sterge clientul cu idclient=2 clientirepository clientirepo = new clientirepository(); //incarca clientul clienti cl = clientirepo.GetClientById(2); //sterge clientul clientirepo.DeleteClient(cl); //salveaza schimbarile ViewData["msg"] = "Deleted!"; return View("Test"); } }

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