如何使用C#winforms中的MVP模式将多个表中的数据显示到我的视图中?
说我有以下表格:
颜色
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类,它们有自己的getter和setter以及表示数据库中表的其他细节。
然后我还为Fruit和Color创建了两个模型。
因此,如果我想创建一个显示有关Color的记录的视图,我会使用我为Color创建的模型来检索颜色集合(例如List<Color>
)。
如果我使用DataGridView显示该记录,我会得到类似如下的内容:
+-----+--------+
| Id | Name |
+-----+--------+
| 70 | Red |
| 80 | Orange |
| 90 | Violet |
+-----+--------+
对于Fruit记录,我可以使用上面相同的方法,但我需要显示颜色名称而不是颜色ID,如下所示:(假设我使用的是DataGridView或自定义控件)
+-----+--------+----------+
| Id | Name | Color |
+-----+--------+----------+
| 10 | Apple | Red |
| 20 | Orange | Orange |
| 30 | Grapes | Violet |
+-----+--------+----------+
我想我可以为它创建另一个类并命名为“FruitColor&#39;然后赋予它与上面的Fruit类相同的属性,但不是具有颜色id属性,而是用颜色名称代替它......但是我不确定它是否是在MVP中正确的做事方式。我想我应该问你们有关如何正确行事的任何提示......
我没有在我的项目中使用ORM,因为我想了解它是如何手动完成的......但我也很感激与使用ORM相关的任何帮助。我也在3周前开始学习MVP,所以我真的希望得到任何帮助。
答案 0 :(得分:2)
检索Fruit
时,您应该使用SQL中的JOIN
查询颜色:
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; }
}