Евгений Колесников 2 vuotta sitten
vanhempi
sitoutus
a15c27a8ad
1 muutettua tiedostoa jossa 28 lisäystä ja 0 poistoa
  1. 28 0
      articles/sprint_lab.md

+ 28 - 0
articles/sprint_lab.md

@@ -86,6 +86,34 @@
         .ExecuteSqlRaw($"DELETE FROM Product WHERE Id={currentProduct.Id}");
     ```
 
+1. Достаточно часто видел ситуацию, когда в окне редактирования продукции пытаются привязать данные из словаря, но данных нет.
+
+    Это может получиться потому, что на предыдущем окне при получении списка продукции не были получены связанные данные.
+
+    **EntityFramework** сам за вас не думает, что вы ему сказали выбрать, то и получите:
+
+    ```cs
+    productList = context.Products
+        .ToList();
+    ```
+
+    В этом варианте будет выбраны данные только из таблицы **Product**. Чтобы добавить данные в свойство *ProductType* (это виртуальное свойство, что означает, что данные находятся в связанной таблице), нужно добавит метод *Include*
+
+    ```cs
+    productList = context.Products
+        .Include(p => p.ProductType)
+        .ToList();
+    ```
+
+    Но злоупотреблять включениями не надо, если связанные данные не нужны на главном окне, то лучше их отдельным запросом подтянуть в окне редактирования. Для этого можно в конструктор окна редактирования передавать не объект целиком, а его `id`:
+
+    ```cs
+    currentProduct = context.Products
+        .Where(p => p.Id == editProductId)
+        .Include(p => p.ProductType)
+        .SingleOrDefault();
+    ```
+
 1. Dapper
 
    Как показал опыт, **EntityFramework** очень громоздкий и не всегда понятный.