Pārlūkot izejas kodu

расписал параметры реконструирования

Евгений Колесников 3 gadi atpakaļ
vecāks
revīzija
997bbf0baf
1 mainītis faili ar 29 papildinājumiem un 9 dzēšanām
  1. 29 9
      articles/cs_mysql_connection3.md

+ 29 - 9
articles/cs_mysql_connection3.md

@@ -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 @@
 
 ![](../img/cs001.png)
 
-В *целевой платформе* укажите **.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` вашего проекта.
+параметры команды:
 
-![](../img/cs003.png)
+* "строка подключения": здесь вариант для 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` вашего проекта.
+
+![](../img/cs003.png)
 
 Например, рассмотрим таблицу **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-команд)
+
 Всё работает!!!
 
 ![](../img/cs004.png)