
- •Лабораторна робота №1
- •Додаток з Entity Framework. Підхід Model First
- •Створення запитів в Entity Framework
- •Взаємодія з даними. Підходи Code First
- •InitializeComponent();
- •Code-First до існуючої бази даних
- •Database First
- •Visiual Studio відобразить нам схему моделі. У моєму випадку в бд є тільки одна таблиця Persons, тому на схемі відображається тільки одна сутність Person:
- •InitializeComponent();
InitializeComponent();
db = new PersonContext();
db.Persons.Load(); // загружаем данные из БД
// выполняем привязку
dataGridView1.DataSource = db.Persons.Local.ToBindingList();
}
private void button1_Click(object sender, EventArgs e)
{
Person p = new Person { Name = textBox1.Text, Age = (int)numericUpDown1.Value };
db.Persons.Add(p);
db.SaveChanges();
MessageBox.Show(p.Name + " добавлено");
}
private void button2_Click(object sender, EventArgs e)
{
try
{
if (dataGridView1.SelectedRows.Count > 0)
{
int indexOfSelectedRow = dataGridView1.SelectedRows[0].Index;
int id = Int32.Parse(dataGridView1[0, indexOfSelectedRow].Value.ToString());
Person person = db.Persons.Find(id);
if (person != null)
{
db.Persons.Remove(person);
db.SaveChanges();
}
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
}
}
Як і при підході Model First тут ми створюємо контекст даних PersonContext. Для отримання всіх даних використовується метод db.Persons.Load (), а потім виконуємо прив'язку до елементу Datagridview: db.Persons.Local.ToBindingList ();
У коді збереження після натискання кнопки треба виконати два методи: db.Persons.Add (p);, в який передаємо новий об'єкт Person, і метод SaveChanges (), який власне і виконує збереження в БД. На більш низькому рівні метод SaveChanges () генерує sql-вираз INSERT і здійснює вставку в БД.
І схожим чином працює видалення, тільки в цьому випадку застосовується метод db.Persons.Remove (person); і, щоб зафіксувати видалення, також використовується метод SaveChanges ().
І на завершення роботи з формою нам треба додати код знищення контексту даних. Так як у нас визначений один контекст на форму, то і знищувати ми його будемо при знищенні форми, тобто в її методі Dispose, визначення якого знаходиться у файлі Form1.Designer.cs. Відкриємо його, знайдемо реалізацію методу Dispose форми і змінимо його наступним чином:
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
db.Dispose();
base.Dispose(disposing);
}
Тепер ми можемо запустити і додати парочку нових об'єктів Person. Якщо ми закриємо форму, припинимо виконання проекту і потім запустимо проект знову, то побачимо, що раніше додані елементи завантажуються в DataGridview. Де ж це все зберігається?
Щоб це дізнатися, виберемо в меню Visual Studio пункт View-> Other Windows-> Database Explorer (для VS 2013). І у вікні оглядача баз даних натиснемо на значок Connect to Database:
У вікні, додавання підключення встановлюємо підключення до створеної через CodeFirst бази даних. У полі Server name вводимо ім'я SQL сервера, яке використовується на вашому комп'ютері. І потім у полі Select or Enter database name вводимо назву нашого підключення DbConnection (яке ми встановили в конструкторі контексту даних).
І після вибору підключення ми можемо побачити базу даних та її таблиці у вікні Database Explorer:
Також зверніть увагу, що таблиця для зберігання об'єктів Person називається People, так як для автоматичної генерації таблиць використовуються правила англійської мови. І так як множина від person - people, то і таблиця називається people, а не persons, як я назвав властивість в контексті бази даних. У більшості випадків назви таблиць будуть містити ім'я моделі з додаванням суфікса s: клас user - таблиця users і т.д.
І якщо ми відкриємо таблицю, то побачимо збережені в ній нами дані.