EntityFramework:数据库设计m到1的关系

时间:2017-06-20 09:24:27

标签: c# entity-framework many-to-many one-to-many

我喜欢在数据库中存储一个集合,其中包含一组可用的“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级别的解决方案。 ???

1 个答案:

答案 0 :(得分:1)

  

“因为我有多辆汽车和foreach汽车在车轮上有一个新的条目   将使用相同的内容创建。“

您正在描述m to n(多对多)问题,而不是m to 1。因此,您必须使用联结表。

您描述的解决方案看起来不错。

如果你想摆脱Wheel中的导航属性,你可以看一下这篇文章:Map Many to Many relationship without navigation property