如何使用导航属性创建对象的实例?
在我的应用程序中,我使用两个类来表示Fruit的对象和Color的对象,如下所述。
public class Fruit
{
public Fruit(int fruitId, string name, Color color)
{
FruitId = fruitId;
Name = name;
Color = color;
}
public int FruitId { get; set; }
public string Name { get; set; }
public Color Color { get; set; }
}
public class Color
{
public Color(int colorId, string name, List<Fruit> fruits)
{
ColorId = colorId;
Name = name;
Fruits = fruits;
}
public int ColorId { get; set; }
public string Name { get; set; }
public List<Fruit> Fruits { get; set; }
}
在创建Fruit或Color的实例时,我从数据库中获取数据非常简单,但问题是,我不知道如何填充Fruit或Color的数据&# 39;导航属性......
result = some_query_result_from_database...
Fruit f = new Fruit(result["FruitId"], result["Name"], ???);
问题:
如果我更换???从上面的代码中可以看出:
new Color(some_colorId, some_colorName, some_list_of_fruits)
我在哪里可以获得 some_list_of_fruits ?
更新#1:
上面的Fruit和Color对象表示数据库中的表,对于此示例,我将其命名为相同,因此Fruit对象与数据库中的Fruit表对应,Color对象也是如此:
Table definition:
+----------+
| Fruit |
+----------+
| FruitId |
| Name |
| ColorId |
+----------+
|∞
|
|1
+----------+
| Color |
+----------+
| ColorId |
| Name |
+----------+
Table contents:
Fruits
+---------+--------+----------+
| FruitId | Name | ColorId |
+---------+--------+----------+
| 10 | Apple | 70 |
| 20 | Orange | 80 |
| 30 | Grapes | 90 |
+---------+--------+----------+
Colors
+----------+--------+
| ColorId | Name |
+----------+--------+
| 70 | Red |
| 80 | Orange |
| 90 | Violet |
+----------+--------+
更新#2:
我忽略了SriramSakthivel的评论,我意识到SriramSakthivel也在问我如何获取我的对象的数据。所以这就是。
对于我的Fruit对象:
string cs = some_connection_string;
MySqlConnection c = new MySqlConnection(cs);
try
{
c.Open();
string query = select_statement_to_get_fruits_from_db;
...then after that, I use MySqlDataReader to loop through the result to create fruit objects
}
对于我的Color对象,它与上述命令的步骤完全相同,只是在我的查询中,我用select语句替换它以从数据库中检索颜色数据。
答案 0 :(得分:1)
你有循环依赖,你不能在构造函数中构造完整的对象 - 你以后必须至少填充循环依赖的一面。
一个选择是建立&#34;水果&#34;的集合。在你创建它们时:
Dictionary
可能就是您要找的东西。)样品:
public Fruit(int fruitId, string name, Color color)
{
FruitId = fruitId;
Name = name;
Color = color;
color.Fruits.Add(this);
}
您还可以在创建水果时按需创建颜色:
public Fruit CreateFruit(int fruitId, string fruitName, int colorId)
{
if (!colorDictionary.ContainsKey(colorId))
{
var name = ...// Somehow get color name for colorID
colorDictionary.Add(colorId,
new Color { ColorId = ColorId, Name = name, List = new List<Fruits>()});
}
return new Fruit(fruitId, fruitName, colorDictionary[colorId];
}