|
|
@@ -27,7 +27,7 @@
|
|
|
|
|
|
# Создание подключения к БД MySQL.
|
|
|
|
|
|
-По макету видно, что на первом экране уже нужны почти все данные, которые мы импортировали ранее: наименование продукта и артикул (таблица **Product**), тип продукта (**ProductType**), список материалов и стоимость материалов (**Material** через **ProductMaterial**).
|
|
|
+По макету видно, что на первом экране уже нужны почти все данные, которые мы импортировали ранее: *наименование продукта* и *артикул* (таблица **Product**), *тип продукта* (**ProductType**), *список* материалов и *стоимость* материалов (**Material** через **ProductMaterial**).
|
|
|
|
|
|
Есть несколько вариантов работы с данными:
|
|
|
|
|
|
@@ -47,7 +47,7 @@
|
|
|
|
|
|
**Во-вторых**, ORM EntityFramewok не "дружит" с последними версиями MySQL коннектора
|
|
|
|
|
|
-**.NET Core** - кроссплатформенная библиотека, поддерживает последние версии языка и ORM EntityFramewokCore.
|
|
|
+**.NET Core** - кроссплатформенная библиотека, поддерживает последние версии языка и ORM EntityFramewokCore нормально работает с MySQL.
|
|
|
|
|
|
Мы пока останемся на технологии **WPF**, т.е. ограничимся ОС Windows, но в перспективе перейдём и на Linux.
|
|
|
|
|
|
@@ -55,7 +55,7 @@
|
|
|
|
|
|

|
|
|
|
|
|
-В *целевой платформе* укажите **.NET 5.0** (для VSC 19 это последняя версия, для VSC 22 уже есть .NET 6)
|
|
|
+В *целевой платформе* укажите **.NET 5.0** (для Visual Studio 19 это последняя версия, для Visual Stidio 22 уже есть .NET 6)
|
|
|
|
|
|
В контекстном меню *зависимости* выберите "Управление пакетами NuGet" и установите пакеты "Microsoft.EntityFrameworkCore", "Microsoft.EntityFrameworkCore.Tools" и "Pomelo.EntityFrameworkCore.MySql"
|
|
|
|
|
|
@@ -73,11 +73,28 @@
|
|
|
Scaffold-DbContext "server=kolei.ru;database=esmirnov;uid=esmirnov;password=111103;" Pomelo.EntityFrameworkCore.MySql -OutputDir Models -f
|
|
|
```
|
|
|
|
|
|
-Эта команда создает контекст подключения (параметры в кавычках) к провайдеру MySQL и модели сущностей в папке `Models` вашего проекта.
|
|
|
+параметры команды:
|
|
|
|
|
|
-
|
|
|
+* "строка подключения": здесь вариант для MySQL
|
|
|
+
|
|
|
+ - **server**: доменное имя или IP-адрес севрера (на демо экзамене будет что-то типа 192.168.1.32)
|
|
|
+ - **database**: название базы данных на сервере MySQL. Для лабораторных работ выдаёт преподаватель, на демо экзамене `userXX`
|
|
|
+ - **uid**: логин пользователя (обычно то же, что и название БД, но если у вас свой сервер MySQL, то там вы рулите сами)
|
|
|
+ - **password**: пароль пользователя
|
|
|
+
|
|
|
+* используемый провайдер БД (Pomelo.EntityFrameworkCore.MySql)
|
|
|
+
|
|
|
+* **-OutputDir "Название каталога"**: название каталога в вашем проекте, в котором будут созданы контекст и модели БД
|
|
|
+
|
|
|
+* **-f | -Force**: перезаписывать модели (при повторном запуске реконструирования)
|
|
|
|
|
|
->Если вы хотите реконструировать не всю базу, а отдельные таблицы, то можно добавить параметр `-Tables`
|
|
|
+* **-Context "название класса"**: по-умолчанию при реконструировании создаётся класс контекста **"database"+Context**, т.е. при моих настройках получится **esmirnovContext**. Используя параметр **-Context** можно указать произвольное имя класса
|
|
|
+
|
|
|
+* **-Tables "список таблиц, разделённый запятыми"**, например `-Tables Product,Material,ProductType,MaterialType,ProductMaterial`: список таблиц для реконструирования. В рамках демо экзамена использовать не нужно (если у вас не осталось таблиц импорта в базе данных, иначе фреймворк может выдать ошибки, что в таблице нет первичного ключа), но при выполнении лабораторных работ понадобится, т.к. у вас в одной физической БД будет несколько логических: разные варианты заданий + таблицы для курсового проекта.
|
|
|
+
|
|
|
+Эта команда создает контекст подключения (параметры в кавычках) к провайдеру (второй параметр) MySQL и модели сущностей в папке `Models` вашего проекта.
|
|
|
+
|
|
|
+
|
|
|
|
|
|
Например, рассмотрим таблицу **Product**:
|
|
|
|
|
|
@@ -129,9 +146,10 @@ public partial class Product
|
|
|
</Grid.ColumnDefinitions>
|
|
|
|
|
|
<StackPanel
|
|
|
- Orientation="Vertical"
|
|
|
- Grid.RowSpan="3"
|
|
|
- VerticalAlignment="Bottom">
|
|
|
+ Orientation="Vertical"
|
|
|
+ Grid.RowSpan="3"
|
|
|
+ VerticalAlignment="Bottom">
|
|
|
+ <!-- левая панель для кнопок -->
|
|
|
</StackPanel>
|
|
|
|
|
|
<WrapPanel
|
|
|
@@ -177,6 +195,8 @@ public partial class Product
|
|
|
}
|
|
|
```
|
|
|
|
|
|
+ Обратите внимание, **context.Products** это не модель, а виртуальный DbSet (коллекция сущностей), объявленный в классе контекста: `public virtual DbSet<Product> Products { get; set; }`. При чтении этой коллекции как раз и происходит обращение к БД (посылка SQL-команд)
|
|
|
+
|
|
|
Всё работает!!!
|
|
|
|
|
|

|