C# și Entity Framework - Universitatea din CraiovaC# și Entity Framework Entity Framework este...

26
C# și Entity Framework Entity Framework este soluția ORM (Object Relational Mapping) oferită de Microsoft. Oferă dezvoltatorilor un mecanism automat pentru accesarea și stocarea datelor în baza de date. Acesta generează practic obiecte și entități conform tabelelor din baza de date și furnizează mecanisme precum: - Efectuarea operaților CRUD (Create, Read, Update, Delete) - Gestionarea cu ușuință a relaților “1 la 1”, “1 la mulți” și “mulți la mulți” - Capacitatea de a avea relații de succesiune între entități Descarcăm tool-ul Entity Framework Power Tools de la adresa următoare: https://visualstudiogallery.msdn.microsoft.com/72a60b14-1581-4b9b-89f2-846072eff19d Acest tool inversează și generează read-only EDM (Entity Data Model). EDM este un model care descrie entitățile și relațiile dintre ele. Creați baza de date Online_tv

Transcript of C# și Entity Framework - Universitatea din CraiovaC# și Entity Framework Entity Framework este...

Page 1: C# și Entity Framework - Universitatea din CraiovaC# și Entity Framework Entity Framework este soluția ORM (Object Relational Mapping) oferită de Microsoft. Oferă dezvoltatorilor

C# și Entity Framework

Entity Framework este soluția ORM (Object Relational Mapping) oferită de Microsoft.

Oferă dezvoltatorilor un mecanism automat pentru accesarea și stocarea datelor în baza de

date. Acesta generează practic obiecte și entități conform tabelelor din baza de date și

furnizează mecanisme precum:

- Efectuarea operaților CRUD (Create, Read, Update, Delete)

- Gestionarea cu ușuință a relaților “1 la 1”, “1 la mulți” și “mulți la mulți”

- Capacitatea de a avea relații de succesiune între entități

Descarcăm tool-ul Entity Framework Power Tools de la adresa următoare:

https://visualstudiogallery.msdn.microsoft.com/72a60b14-1581-4b9b-89f2-846072eff19d

Acest tool inversează și generează read-only EDM (Entity Data Model).

EDM este un model care descrie entitățile și relațiile dintre ele.

Creați baza de date Online_tv

Page 2: C# și Entity Framework - Universitatea din CraiovaC# și Entity Framework Entity Framework este soluția ORM (Object Relational Mapping) oferită de Microsoft. Oferă dezvoltatorilor

Creați tabelele:

Se creează tabela User:

Page 3: C# și Entity Framework - Universitatea din CraiovaC# și Entity Framework Entity Framework este soluția ORM (Object Relational Mapping) oferită de Microsoft. Oferă dezvoltatorilor

Setăm User_ID ca și cheie primară.

Salvați tabelul cu numele User

Creați tabela Movie in aceeași manieră ca mai sus

Click dreapta

Page 4: C# și Entity Framework - Universitatea din CraiovaC# și Entity Framework Entity Framework este soluția ORM (Object Relational Mapping) oferită de Microsoft. Oferă dezvoltatorilor

Setăm Movie_ID ca și cheie primară ca mai sus

Salvați apoi tabelul cu numele Movie

Creați relațiile între tabele.

Vrem ca un user sa poată adăuga mai multe filme, așa că vom crea o cheie străina pentru

tabelul Movie.

Page 5: C# și Entity Framework - Universitatea din CraiovaC# și Entity Framework Entity Framework este soluția ORM (Object Relational Mapping) oferită de Microsoft. Oferă dezvoltatorilor

Salvați modificările.

Page 6: C# și Entity Framework - Universitatea din CraiovaC# și Entity Framework Entity Framework este soluția ORM (Object Relational Mapping) oferită de Microsoft. Oferă dezvoltatorilor

INTRODUCEREA DATELOR

Populăm tabelele User și Movie

Page 7: C# și Entity Framework - Universitatea din CraiovaC# și Entity Framework Entity Framework este soluția ORM (Object Relational Mapping) oferită de Microsoft. Oferă dezvoltatorilor

Crearea aplicației în C#

Creați un nou proiect Console application

În aceeași soluție creați un proiect nou Windows Forms

Page 8: C# și Entity Framework - Universitatea din CraiovaC# și Entity Framework Entity Framework este soluția ORM (Object Relational Mapping) oferită de Microsoft. Oferă dezvoltatorilor

Se instalează Entity Framework pentru fiecare proiect.

Click dreapta pe OnlineTV, respectiv OnlineTV_WindowsFormsApp -> Manage NuGet

Packages…

Page 9: C# și Entity Framework - Universitatea din CraiovaC# și Entity Framework Entity Framework este soluția ORM (Object Relational Mapping) oferită de Microsoft. Oferă dezvoltatorilor

Dați click dreapta pe proiectul OnlineTV, Entity Framework și alegeți Reverse Engineer

Code First, acesta va genera clasele POCO (Plain old CLR objects – sunt simple entități fară

nicio funcționalitate de acces la date), DbContext derivate și Code-First mapping din baza de

date existentă.

Clasa pentru tabela Movie

Clasa pentru tabela User

Clasa responsabilă pentru

interacțiunea cu date ca și obiecte

Page 10: C# și Entity Framework - Universitatea din CraiovaC# și Entity Framework Entity Framework este soluția ORM (Object Relational Mapping) oferită de Microsoft. Oferă dezvoltatorilor

Din App.config din proiectul OnlineTV, copiați stringul conexiunii în App.config din

OnlineTV_WindowsFormsApp.

Adăugăm referința la modelul bazei de date OnlineTV

Page 11: C# și Entity Framework - Universitatea din CraiovaC# și Entity Framework Entity Framework este soluția ORM (Object Relational Mapping) oferită de Microsoft. Oferă dezvoltatorilor

Creați interfața grafică

Vom adăuga noi interfețe

MovieForm

Creați forma MovieForm și veti folosi 1 ListBox , un TextBox, 2 Lable-uri si 2 butoane.

Ar trebui sa arate in felul urmator :

Page 12: C# și Entity Framework - Universitatea din CraiovaC# și Entity Framework Entity Framework este soluția ORM (Object Relational Mapping) oferită de Microsoft. Oferă dezvoltatorilor

Pentru ListBox, va duce-ți la Properties, apasati pe Events (iconita de arata ca un fulger) si

dati dublu click pe SelectedIndexChanged.

Iar codul pentru aceasta interfață va fi:

using OnlineTV.Models; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace OnlineTV_WindowsFormsApp { public partial class MoviesForm : Form { public MoviesForm() { InitializeComponent(); AddMovie(); } //Functia afiseaza in ListBox lista de filme din baza de date public void AddMovie() { Online_tvContext context = new Online_tvContext(); listBox1.DataSource = context.Movies.ToList(); listBox1.DisplayMember = "Title"; } //Afiseaza detalii pentru fiecare film selectat private void listBox1_SelectedIndexChanged(object sender, EventArgs e) { if (listBox1.SelectedIndex > 0) { textBox1.Clear(); }

Page 13: C# și Entity Framework - Universitatea din CraiovaC# și Entity Framework Entity Framework este soluția ORM (Object Relational Mapping) oferită de Microsoft. Oferă dezvoltatorilor

Online_tvContext context = new Online_tvContext(); var movie = listBox1.SelectedItem as Movie; if (listBox1.SelectedIndex >= 0) { string info = string.Format("{0}{1}{2}{3}{4}{5}{6}", movie.Movie_ID + Environment.NewLine, movie.Title + Environment.NewLine, movie.DateAdd + Environment.NewLine, movie.Duration + Environment.NewLine, movie.Width + Environment.NewLine, movie.Height + Environment.NewLine, movie.UploadUser_ID + Environment.NewLine); textBox1.Text = info; } } //Sterge un film din baza de date private void button2_Click(object sender, EventArgs e) { var context = new Online_tvContext(); var item = listBox1.SelectedItem as Movie; var movie = context.Movies.FirstOrDefault(x => x.Movie_ID== item.Movie_ID); if (movie == null) { MessageBox.Show("Filmul nu exista!"); } else { context.Movies.Remove(movie); context.SaveChanges(); } MessageBox.Show("Filmul a fost sters cu succes!"); ClearAll(); AddMovie(); } //Curata textBox-ul public void ClearAll() { textBox1.Clear(); listBox1.DataSource = null; } //Adauga un film in baza de date private void button1_Click(object sender, EventArgs e) { AddDialogMoviesForm dialog = new AddDialogMoviesForm(); dialog.ShowDialog(); ClearAll(); AddMovie(); } } }

Page 14: C# și Entity Framework - Universitatea din CraiovaC# și Entity Framework Entity Framework este soluția ORM (Object Relational Mapping) oferită de Microsoft. Oferă dezvoltatorilor

AddDialogMoviesForm

Creați interfața AddDialogMoviesForm

Noul form trebuie sa fie alcatuit din 5 textBoxuri, un dateTimePicker, 7 label-uri, 2

butoane și un TableLayoutPanel.

Selectați pentru TableLayoutPanel din meniul Proprietati Dock -> Fill, iar pentru a adăuga

linii sau coloane sau pentru a edita dimensiunea acestora faceți click dreapta pe el.

Page 15: C# și Entity Framework - Universitatea din CraiovaC# și Entity Framework Entity Framework este soluția ORM (Object Relational Mapping) oferită de Microsoft. Oferă dezvoltatorilor

La Edit Rows and Columns puteți edita dimensiunea pentru randuri, respectiv coloane ca în

figura:

Modificați câmpurile textBox2, textBox3 și textBox4 sa accepte doar cifre.

Selectati textBox2, textBox3, textBox4 (pe rând) properties, events și dați dublu click pe

KeyPress:

Codul va fi următorul:

using OnlineTV.Models; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace OnlineTV_WindowsFormsApp { public partial class AddDialogMoviesForm : Form {

Page 16: C# și Entity Framework - Universitatea din CraiovaC# și Entity Framework Entity Framework este soluția ORM (Object Relational Mapping) oferită de Microsoft. Oferă dezvoltatorilor

public AddDialogMoviesForm() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { var context = new Online_tvContext(); var movie = context.Movies.Create(); var user = context.Users.FirstOrDefault(x => x.Username == textBox5.Text); //aici punem conditi ca sa nu putem adauga campuri nule in baza de date //daca am adauga campuri goala atunci ar fi eroare pentru ca noi in baza //de date avem campurile not null if (string.IsNullOrEmpty(textBox1.Text) || string.IsNullOrEmpty(textBox2.Text) || string.IsNullOrEmpty(textBox3.Text) || string.IsNullOrEmpty(textBox4.Text) || string.IsNullOrEmpty(textBox5.Text)) { MessageBox.Show("Toate campurile sunt obligatorii!"); return; } if (user == null) { MessageBox.Show("Acest user nu exista! Va rog introduceti in rubrica Username un user care sa existe in baza de date la coloana Username"); return; } else { movie.Title = textBox1.Text; movie.DateAdd = dateTimePicker1.Value; movie.Duration = Convert.ToInt32(textBox2.Text); movie.Height = Convert.ToInt32(textBox3.Text); movie.Width = Convert.ToInt32(textBox4.Text); movie.UploadUser_ID = user.User_ID; context.Movies.Add(movie); context.SaveChanges(); MessageBox.Show("Filmul a fost introdus!"); this.Close(); } } private void button2_Click(object sender, EventArgs e) { this.Close(); } //Permite introducerea doar a cifrelor in textBox2, textBox3 si textBox4 private void textBox2_KeyPress(object sender, KeyPressEventArgs e) { if (!char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar) && (e.KeyChar != '.')) {

Page 17: C# și Entity Framework - Universitatea din CraiovaC# și Entity Framework Entity Framework este soluția ORM (Object Relational Mapping) oferită de Microsoft. Oferă dezvoltatorilor

e.Handled = true; } } } }

Main

Acum vom crea forma Main.

Din bara de instrumente, adăugați 1 MenuStrip cu numele mnuMain și introduceți trei

butoane cu numele Movies, Users iar pentru Users introduceți în meniu Edit și Add. Mai

adăugați un PictureBox.

Selectați PictureBox și vă duceți la Proprietăți, Appearance unde la Image selectați o imagine

Codul va arăta așa:

using System;

Page 18: C# și Entity Framework - Universitatea din CraiovaC# și Entity Framework Entity Framework este soluția ORM (Object Relational Mapping) oferită de Microsoft. Oferă dezvoltatorilor

using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace OnlineTV_WindowsFormsApp { public partial class MainForm : Form { public MainForm() { InitializeComponent(); this.FormClosed += MainForm_FormClosed; } void MainForm_FormClosed(object sender, FormClosedEventArgs e) { Application.Exit();

} private void moviesToolStripMenuItem_Click(object sender, EventArgs e) { MoviesForm f = new MoviesForm(); f.FormClosed += f_FormClosed; f.Show(); this.Hide(); } void f_FormClosed(object sender, FormClosedEventArgs e) { this.Show(); } void f1_FormClosed(object sender, FormClosedEventArgs e) { this.Show(); } private void editToolStripMenuItem_Click(object sender, EventArgs e) { UserForm f1 = new UserForm(); f1.FormClosed += f1_FormClosed; f1.Show(); this.Hide(); } private void addToolStripMenuItem_Click(object sender, EventArgs e) { AddUser a = new AddUser(); a.Show(); a.FormClosed += a_FormClosed; this.Hide(); } void a_FormClosed(object sender, FormClosedEventArgs e) { this.Show(); } }

Page 19: C# și Entity Framework - Universitatea din CraiovaC# și Entity Framework Entity Framework este soluția ORM (Object Relational Mapping) oferită de Microsoft. Oferă dezvoltatorilor

}

Din meniu ne putem duce la Movies sau Users, la cel din urmă având posibilitatea să

alegem dacă să modificăm sau să adăugăm un user nou.

Evenimentul FormClosed are loc după ce forma a fost închisă de utilizator sau prin

metodele Close sau Exit ale clasei Application.

Puteți utiliza acest eveniment pentru a efectua sarcini ca eliberarea resurselor folosite

de formă și de a salva informații introduse în formă sau pentru a actualiza forma părinte.

UserForm

Adăugam o nouă forma UserForm care va avea 1 ComboBox, 1 DateTimePicker, 4

TextBoxuri, 6 Label-uri, 2 butoane și 1 TableLayoutPanel ca in figura de mai jos:

ComboBox-ul trebuie să aibă numele cboUser, DateTimePicker-ul trebuie să aibă

numele dtpRegistrationDate iar cele patru TextBox-uri trebuie să aibă numele de sus în jos:

txtUserName, txtUserPass, txtCountryCode si txtUserID. (foarte important!!!)

Pentru TableLayoutPanel se procedează ca mai sus.

Page 20: C# și Entity Framework - Universitatea din CraiovaC# și Entity Framework Entity Framework este soluția ORM (Object Relational Mapping) oferită de Microsoft. Oferă dezvoltatorilor

Selectați txtCountryCode și modificați la proprietăți valoarea câmpului MaxLength

în 2 și la events dați dublu click pe KeyPress (vrem să adăugăm doar cifre – Vezi mai sus)

, apoi selectați txtUserID și modificați ReadOnly în True ca în figurile de mai jos:

Selectați ComboBox-ul, vă duceți la proprietăți și apăsați pe butonul Events (arată ca un

fulger) ca în figura de mai jos:

Codul va fi:

using OnlineTV.Models; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq;

Page 21: C# și Entity Framework - Universitatea din CraiovaC# și Entity Framework Entity Framework este soluția ORM (Object Relational Mapping) oferită de Microsoft. Oferă dezvoltatorilor

using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace OnlineTV_WindowsFormsApp { public partial class UserForm : Form { public UserForm() { InitializeComponent(); AddUser(); } public void AddUser() { var context = new Online_tvContext(); var users = context.Users.ToList(); comboBox1.DataSource = users; comboBox1.DisplayMember = "Username"; } private void txtCountryCode_KeyPress(object sender, KeyPressEventArgs e) { if (!char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar) && (e.KeyChar != '.')) { e.Handled = true; } } private void btnModify_Click(object sender, EventArgs e) { var context = new Online_tvContext(); var convert = Convert.ToInt32(txtUserID.Text); var user = context.Users.FirstOrDefault(x => x.User_ID == convert); if(user != null) { user.Username = txtUserName.Text; user.Password = txtUserPass.Text; user.CountryCode = txtCountryCode.Text; context.SaveChanges(); MessageBox.Show("Userul a fost modificat cu succes!"); this.Close(); } } private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) { var context = new Online_tvContext(); var user = comboBox1.SelectedItem as User; txtUserName.Text = user.Username; txtUserPass.Text = user.Password; txtUserID.Text = Convert.ToString(user.User_ID); txtCountryCode.Text = user.CountryCode; dtpRegistrationDate.Value = user.RegisterDate;

Page 22: C# și Entity Framework - Universitatea din CraiovaC# și Entity Framework Entity Framework este soluția ORM (Object Relational Mapping) oferită de Microsoft. Oferă dezvoltatorilor

} private void btnRemove_Click(object sender, EventArgs e) { var context = new Online_tvContext(); var convert = Convert.ToInt32(txtUserID.Text); var user = context.Users.FirstOrDefault(x => x.User_ID == convert); var movie = context.Movies.FirstOrDefault(x => x.UploadUser_ID == user.User_ID); if(movie != null) { MessageBox.Show("Acest user a introdus un film si nu poate fi sters. Va rugam sa stergeti un user care nu a adaugat film. "); return; } context.Users.Remove(user); context.SaveChanges(); MessageBox.Show("Userul a fost sters!"); this.Close(); } } }

AddUser

Adăugăm forma AddUser pentru a putea adăuga useri noi.

Avem nevoie de un TableLayoutPanel, 4 Label-uri, 3 textBox-uri, 1 dateTimePicker și 2

butoane, iar pentru textBox3 și TableLayoutPanel vom proceda ca mai sus și anume să putem

adăuga doar cifre.

Page 23: C# și Entity Framework - Universitatea din CraiovaC# și Entity Framework Entity Framework este soluția ORM (Object Relational Mapping) oferită de Microsoft. Oferă dezvoltatorilor

Codul va arata:

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using OnlineTV.Models; namespace OnlineTV_WindowsFormsApp { public partial class AddUser : Form { public AddUser() { InitializeComponent(); } public void Clear() { textBox1.Clear(); textBox2.Clear(); textBox3.Clear(); dateTimePicker1.Value = DateTime.Now; } private void button1_Click(object sender, EventArgs e) { var context = new Online_tvContext(); var user = context.Users.Create(); user.Username = textBox1.Text; user.Password = textBox2.Text; user.CountryCode = textBox3.Text; user.RegisterDate = dateTimePicker1.Value; var search = context.Users.FirstOrDefault(x => x.Username == textBox1.Text); if (search != null) { MessageBox.Show("Userul exista! Va rog introduceti un alt username!"); return; } if (textBox1.Text != "" && textBox2.Text != "" && textBox3.Text != "") { context.Users.Add(user); context.SaveChanges(); Clear(); } else { MessageBox.Show("Toate campurile sunt obligatorii!"); return; } }

Page 24: C# și Entity Framework - Universitatea din CraiovaC# și Entity Framework Entity Framework este soluția ORM (Object Relational Mapping) oferită de Microsoft. Oferă dezvoltatorilor

private void button2_Click(object sender, EventArgs e) { this.Close(); } private void textBox3_KeyPress(object sender, KeyPressEventArgs e) { if (!char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar) && (e.KeyChar != '.')) { e.Handled = true; } } } }

LogIn

Acum vom crea forma de LogIn , vom redenumi Form1 și vom folosi 2 Label-uri, 2 textBox-

uri, un TableLayoutPanel și un Button. Pentru TableLayoutPanel vom proceda ca mai sus.

Iar codul va fi:

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq;

Page 25: C# și Entity Framework - Universitatea din CraiovaC# și Entity Framework Entity Framework este soluția ORM (Object Relational Mapping) oferită de Microsoft. Oferă dezvoltatorilor

using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using OnlineTV.Models; namespace OnlineTV_WindowsFormsApp { public partial class LogIn : Form { public LogIn() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { var context = new Online_tvContext(); var user = context.Users.FirstOrDefault(x => x.Username == textBox1.Text && x.Password == textBox2.Text); if(user != null) { MainForm maine = new MainForm(); maine.Show(); this.Hide(); } else { MessageBox.Show("Va rog introduceti campuri valide!"); return; } } } }

Soluția finală a aplicației este următoarea:

Page 26: C# și Entity Framework - Universitatea din CraiovaC# și Entity Framework Entity Framework este soluția ORM (Object Relational Mapping) oferită de Microsoft. Oferă dezvoltatorilor

TEME:

1. Editați aplicația astfel încât în forma AddDialogMoviesForm textBox-ul Username să

se completeze automat cu user-ul logat sau să fie un comboBox din care să îți alegi

user-ul.

2. Adaugați pe forma MoviesForm un nou buton Update ca în figura următoare:

Selectați un film din listă și la apăsarea butonului Update să se deschidă o nouă formă

unde să editați detaliile filmului. Design-ul rămâne la alegerea voastră.