Как отобразить данные из более чем одной таблицы на мой взгляд, используя шаблон MVP в C# winforms?

Как отобразить данные из более чем одной таблицы на мой взгляд, используя шаблон MVP в C# winforms?

Скажем, у меня есть следующие таблицы:

  1. Фрукты
  2. цвет

    Table definition:  
    +----------+  
    | Fruit    |  
    +----------+  
    | Id       |  
    | Name     |  
    | Color_Id |  
    +----------+  
         |∞
         |
         |1
    +----------+  
    | Color    |  
    +----------+  
    | Id       |  
    | Name     |  
    +----------+  
    
    Table contents:  
    
    Fruits  
    +-----+--------+----------+  
    | Id  | Name   | Color_Id |  
    +-----+--------+----------+  
    | 10  | Apple  | 70       |  
    | 20  | Orange | 80       |  
    | 30  | Grapes | 90       |  
    +-----+--------+----------+  
    
    Colors  
    +-----+--------+  
    | Id  | Name   |  
    +-----+--------+  
    | 70  | Red    |  
    | 80  | Orange |  
    | 90  | Violet |  
    +-----+--------+  
    

Затем в своем решении я создал классы для каждой таблицы, а именно, класса Fruit и Color, имеющие свои собственные методы получения и установки и другие детали, представляющие таблицы в базе данных.

Затем я также создал две модели для фруктов и цветов.

Поэтому, если бы я хотел создать представление, которое будет отображать запись о цвете, я использовал бы модель, которую я создал для цвета, чтобы получить коллекцию цветов (например, List<Color>). Если я использую DataGridView для отображения этой записи, я получу что-то похожее на следующее:

    +-----+--------+  
    | Id  | Name   |  
    +-----+--------+  
    | 70  | Red    |  
    | 80  | Orange |  
    | 90  | Violet |  
    +-----+--------+  

Для записей Fruit я мог бы использовать тот же метод выше, но мне нужно отобразить имя цвета вместо идентификатора цвета, как показано ниже: (Предполагается, что я использую DataGridView или пользовательский элемент управления)

    +-----+--------+----------+  
    | Id  | Name   | Color    |  
    +-----+--------+----------+  
    | 10  | Apple  | Red      |  
    | 20  | Orange | Orange   |  
    | 30  | Grapes | Violet   |  
    +-----+--------+----------+  

Я подумал, что мог бы создать для него другой класс и назвать его "FruitColor", а затем присвоить ему те же свойства, что и у класса "Fruit" выше, но вместо того, чтобы иметь свойство id цвета, я бы заменил его на имя цвета... Но я Я не совсем уверен, правильно ли это поступает в MVP. Я подумал, что должен попросить вас, ребята, о том, как сделать это правильно...

Я не использую ORM для своего проекта, потому что я хочу понять, как это сделать вручную... Но я также был бы признателен за любую помощь, связанную с использованием ORM. Я также только начал изучать MVP 3 недели назад, так что я действительно надеюсь на любую помощь.

1 ответ

Решение

При получении Fruit, вы должны запросить цвета с ними, используя JOIN в SQL:

RETRIEVE f.*, c.name as color_name
FROM Fruits f
INNER JOIN Colors c
ON f.Color_Id = c.Id

Затем преобразуйте полученные результаты Fruit как вы, вероятно, уже делаете. Это, однако, потребует от вас расширения Fruit класс, так что это будет иметь string свойство для цвета name переменная, или просто добавьте свойство, которое содержит цвет в целом:

public class Fruit
{
   public int Id { get; set; }
   public string Name { get; set; }
   public Color Color { get; set; }
}
Другие вопросы по тегам