如何创建具有导航属性的对象实例
本文关键字:属性 导航 对象 实例 何创建 创建 | 更新日期: 2023-09-27 18:27:31
如何创建具有导航属性的对象实例?
在我的应用程序中,我使用两个类来表示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的导航属性的数据。。。
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的评论,我意识到SriramSakathivel也在问我如何获得对象的数据。就是这样。
对于我的水果对象:
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语句替换它以从数据库中检索颜色数据外,其他步骤与上面的命令相同。
您有循环依赖关系,您将无法在构造函数中构造完整的对象-您以后必须至少填充循环依赖关系的一侧。
一种选择是在创建"水果"时建立它们的集合:
- 首先建立所有颜色的集合,但有空的水果列表(通过colorId的
Dictionary
可能是你想要的) - 创建水果时,在Color的水果列表中注册水果:
样品:
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];
}