Vous êtes sur la page 1sur 9

Acum o sa facem 3 clase: client,produse si cumparari(aceasta clasa ne ajuta la subpunctul 3 cand un

client cumpara un produs si trebuie sa scadem cantitatea)

Clasele le vom adauga in Models


Pentru fiecare clasa trebuie sa declaram un camp ce o sa fie folosit ca identificator in tabelul din baza de
date : acel ProduseId
public class Produse
{
public int ProduseId { get; set; }
public string Producator { get; set; }
public string Ingrediente { get; set; }
public int Cantitate { get; set; }
public double Pret { get; set; }
}

public class Client


{
public int ClientId { get; set; }
public string Nume { get; set; }
public string Prenume { get; set; }
[MaxLength(13), MinLength(13)]
[RegularExpression("^[0-9]*$", ErrorMessage = "CNP invalid")]
public string CNP { get; set; }
//fiecare client poate sa aiba mai multe produse cumparate...deci o colectie
(asa am vazut ca face in laborator ca sa creeze legaturile intre tabele)
public virtual ICollection<Cumparari> Cumparare { get; set; }
}

public class Cumparari


{
public int CumparariId { get; set; }
public int ClientId { get; set; }
public int ProduseId { get; set; }
public int Cantitate { get; set; }
public int CantitateCumparata { get; set; }
//trebuie sa ai id-ul clientului si al produsului ca sa stii cine ce cumpara
public virtual Client Client { get; set; }
public virtual Produse Produs { get; set; }
}

Tot in models se mai adauga o clasa ce este folosita la creearea bazei de date
public class ProblemContext : DbContext
{
public ProblemContext() : base("ProblemContext")
{

}
public virtual DbSet<Client> Clienti { get; set; }
public virtual DbSet<Produse> Produ { get; set; }
public virtual DbSet<Cumparari> Cumparare { get; set; }
}
Acum in Web.config vom adauga linia de cod de mai jos pentru a face legatura cu baza de date

(nu este cum arata el in laborator dar mie asa mi-a mers )

Acel string “ProblemContext” trebuie sa fie acelasi ca cel dat la clasa creata mai sus
<connectionStrings>
<add name="ProblemContext" connectionString="Data Source=(LocalDb)\MSSQLLocalDB;
Integrated Security=True" providerName="System.Data.SqlClient" />
</connectionStrings>

Dupa trebuie sa dati rebuild;

In caz ca nu apare nimic in folderol AppData(cee ace la mine din 10 incercari …doar odata
mi-a creat singur baza de date ) trebuie sa faceti voi o baza de date cu numele
“ProblemContext”(sau oricum ati denumit-o)
Creare baza:

Dupa dati DetachDatabase …ca sa putem sa copiem baza de date

Baza de date o gasiti in folderul Documents din calculator.(copiati cele 2 fisiere:


ProblemContext.mdf si ProblemContext_log.ldf in folderul appdata)
Acum adaugam controlere pentru fiecare din cele 3 clase create :D
Dupa ce adaugam controalele trebuie sa le adaugam si in fisierul _Layout.cshtml si sa
modificam acele linii cum zice in laborator…(alea schimba dora numele acolo )
<li>@Html.ActionLink("Clienti", "Index", "Clients")</li
<li>@Html.ActionLink("Produse", "Index", "Produses")</li>
<li>@Html.ActionLink("Cumparari", "Index", "Cumpararis")</li>

Primul parametru este numele ce apare pe pagina asp si ultimul este numele controlerului,
trebuie scris correct(am uitat sa le schimb numele cand le-am adaugat , le-a pus asa
automat)

La controllerul pt cumparari CumpararisController.cs voam schimba aceasta functie


public ActionResult Create([Bind(Include = "CumparariId,ClientId,ProduseId")] Cumparari
cumparari)
{
if (ModelState.IsValid)
{
db.Cumparare.Add(cumparari);

foreach (Produse item in db.Produ)


{
if (item.ProduseId == cumparari.ProduseId)
{
item.Cantitate -= cumparari.CantitateCumparata;
break;
}
}
db.SaveChanges();
return RedirectToAction("Index");
}

ViewBag.ClientId = new SelectList(db.Clienti, "ClientId", "Nume",


cumparari.ClientId);
ViewBag.ProduseId = new SelectList(db.Produ, "ProduseId", "Producator",
cumparari.ProduseId);
return View(cumparari);
}

Ce este cu galben a fost adaugat :cu acel foreach parcurg produsele si caut id-ul
produsului cumparat si scadem din cantitea curenta,cantitatea cumparata.

Atentiee!!
Daca modificati cele 3 clase create la
inceput ,dup ace faceti rebuild si
adaugati controalele, o sa strice
aplicitia si baza de date …sau nu au efect
si trebuie sa o luati de la inceput

Vous aimerez peut-être aussi