Universitatea din Craiova · Web viewC# și Entity Framework Entity Framework este soluția ORM...

30
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 Universitatea din Craiova · Web viewC# și Entity Framework Entity Framework este soluția ORM...

Page 1: Universitatea din Craiova · Web viewC# și Entity Framework Entity Framework este soluția ORM (Object Relational Mapping) oferită de Microsoft. Oferă dezvoltatorilor un mecanism

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: Universitatea din Craiova · Web viewC# și Entity Framework Entity Framework este soluția ORM (Object Relational Mapping) oferită de Microsoft. Oferă dezvoltatorilor un mecanism

Creați tabelele:Se creează tabela User:

Page 3: Universitatea din Craiova · Web viewC# și Entity Framework Entity Framework este soluția ORM (Object Relational Mapping) oferită de Microsoft. Oferă dezvoltatorilor un mecanism

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: Universitatea din Craiova · Web viewC# și Entity Framework Entity Framework este soluția ORM (Object Relational Mapping) oferită de Microsoft. Oferă dezvoltatorilor un mecanism

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: Universitatea din Craiova · Web viewC# și Entity Framework Entity Framework este soluția ORM (Object Relational Mapping) oferită de Microsoft. Oferă dezvoltatorilor un mecanism

Salvați modificările.

Page 6: Universitatea din Craiova · Web viewC# și Entity Framework Entity Framework este soluția ORM (Object Relational Mapping) oferită de Microsoft. Oferă dezvoltatorilor un mecanism

INTRODUCEREA DATELOR

Populăm tabelele User și Movie

Page 7: Universitatea din Craiova · Web viewC# și Entity Framework Entity Framework este soluția ORM (Object Relational Mapping) oferită de Microsoft. Oferă dezvoltatorilor un mecanism

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: Universitatea din Craiova · Web viewC# și Entity Framework Entity Framework este soluția ORM (Object Relational Mapping) oferită de Microsoft. Oferă dezvoltatorilor un mecanism

Se instalează Entity Framework pentru fiecare proiect.

Click dreapta pe OnlineTV, respectiv OnlineTV_WindowsFormsApp -> Manage NuGet Packages…

Page 9: Universitatea din Craiova · Web viewC# și Entity Framework Entity Framework este soluția ORM (Object Relational Mapping) oferită de Microsoft. Oferă dezvoltatorilor un mecanism

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

Clasa pentru tabela User

Clasa responsabilă pentru

Page 10: Universitatea din Craiova · Web viewC# și Entity Framework Entity Framework este soluția ORM (Object Relational Mapping) oferită de Microsoft. Oferă dezvoltatorilor un mecanism

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: Universitatea din Craiova · Web viewC# și Entity Framework Entity Framework este soluția ORM (Object Relational Mapping) oferită de Microsoft. Oferă dezvoltatorilor un mecanism

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: Universitatea din Craiova · Web viewC# și Entity Framework Entity Framework este soluția ORM (Object Relational Mapping) oferită de Microsoft. Oferă dezvoltatorilor un mecanism

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: Universitatea din Craiova · Web viewC# și Entity Framework Entity Framework este soluția ORM (Object Relational Mapping) oferită de Microsoft. Oferă dezvoltatorilor un mecanism

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: Universitatea din Craiova · Web viewC# și Entity Framework Entity Framework este soluția ORM (Object Relational Mapping) oferită de Microsoft. Oferă dezvoltatorilor un mecanism

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: Universitatea din Craiova · Web viewC# și Entity Framework Entity Framework este soluția ORM (Object Relational Mapping) oferită de Microsoft. Oferă dezvoltatorilor un mecanism

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;

Page 16: Universitatea din Craiova · Web viewC# și Entity Framework Entity Framework este soluția ORM (Object Relational Mapping) oferită de Microsoft. Oferă dezvoltatorilor un mecanism

namespace OnlineTV_WindowsFormsApp{ public partial class AddDialogMoviesForm : Form { 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(); }

Page 17: Universitatea din Craiova · Web viewC# și Entity Framework Entity Framework este soluția ORM (Object Relational Mapping) oferită de Microsoft. Oferă dezvoltatorilor un mecanism

//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 != '.')) { 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

Page 18: Universitatea din Craiova · Web viewC# și Entity Framework Entity Framework este soluția ORM (Object Relational Mapping) oferită de Microsoft. Oferă dezvoltatorilor un mecanism

Codul va arăta așa:

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 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(); }

Page 19: Universitatea din Craiova · Web viewC# și Entity Framework Entity Framework este soluția ORM (Object Relational Mapping) oferită de Microsoft. Oferă dezvoltatorilor un mecanism

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(); } }}

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:

Page 20: Universitatea din Craiova · Web viewC# și Entity Framework Entity Framework este soluția ORM (Object Relational Mapping) oferită de Microsoft. Oferă dezvoltatorilor un mecanism

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.

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:

Page 21: Universitatea din Craiova · Web viewC# și Entity Framework Entity Framework este soluția ORM (Object Relational Mapping) oferită de Microsoft. Oferă dezvoltatorilor un mecanism

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;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;

Page 22: Universitatea din Craiova · Web viewC# și Entity Framework Entity Framework este soluția ORM (Object Relational Mapping) oferită de Microsoft. Oferă dezvoltatorilor un mecanism

} }

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; }

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(); } }}

Page 23: Universitatea din Craiova · Web viewC# și Entity Framework Entity Framework este soluția ORM (Object Relational Mapping) oferită de Microsoft. Oferă dezvoltatorilor un mecanism

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.

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;

Page 24: Universitatea din Craiova · Web viewC# și Entity Framework Entity Framework este soluția ORM (Object Relational Mapping) oferită de Microsoft. Oferă dezvoltatorilor un mecanism

} 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; } }

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

Page 25: Universitatea din Craiova · Web viewC# și Entity Framework Entity Framework este soluția ORM (Object Relational Mapping) oferită de Microsoft. Oferă dezvoltatorilor un mecanism

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;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

Page 26: Universitatea din Craiova · Web viewC# și Entity Framework Entity Framework este soluția ORM (Object Relational Mapping) oferită de Microsoft. Oferă dezvoltatorilor un mecanism

{ MessageBox.Show("Va rog introduceti campuri valide!"); return; } } }}

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

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:

Page 27: Universitatea din Craiova · Web viewC# și Entity Framework Entity Framework este soluția ORM (Object Relational Mapping) oferită de Microsoft. Oferă dezvoltatorilor un mecanism

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ă.