我喜欢在数据库中存储一个集合,其中包含一组可用的“Wheels”。汽车类参考这些车轮。
public class Car
{
private ICollection<Wheel> _wheels;
public ICollection<Wheel> Wheels
{
get { return _wheels; }
set { _wheels = value; }
}
}
public class Wheel
{
public enum position
{
FrontRight,
FrontLeft,
BackRight,
BackLeft,
}
[Key]
public int ID { get; set; }
}
如果我使用实体框架,则外键将存储在Wheels-DataBase表中。这不是希望的结果,因为我有多辆汽车和foreach汽车,车轮中的新条目将使用相同的内容创建。 (浪费存储空间)
Wheels
-------
<PK>ID:Integer
<FK>Car_ID:Integer
Cars
-----
<PK>ID:Integer
所以我尝试通过强制为Car-Wheel关系创建第三个表来尝试另一种解决方案。因此ID将存储在相应的Car_Wheel表中。
我在Wheel级别添加了一个属性,用于聚焦许多关系。
public virtual ICollection<MonitoringTask> RelatedCars { get; set; }
Wish创建了表格方案:
Wheels
-------
<PK>ID:Integer
Cars
-----
<PK>ID:Integer
Car_Wheel
-------
<PK><FK> ID_Car:Integer
<PK><FK> ID_Wheel:Integer
??? 所以这看起来不错,但我正在寻找一种不需要更换Wheel级别的解决方案。 ???
答案 0 :(得分:1)
“因为我有多辆汽车和foreach汽车在车轮上有一个新的条目 将使用相同的内容创建。“
您正在描述m to n
(多对多)问题,而不是m to 1
。因此,您必须使用联结表。
您描述的解决方案看起来不错。
如果你想摆脱Wheel
中的导航属性,你可以看一下这篇文章:Map Many to Many relationship without navigation property