2017-06-20 81 views
0

我喜欢在数据库中存储一个集合,其中包含一组可用的“轮子”。汽车级别参考这些车轮。EntityFramework:数据库设计m到1的关系

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; } 
} 

如果我使用实体框架的外键将被存储在车轮数据库表。这不是预期的结果,因为我有多个Cars和foreach车,Wheels中的新条目将以相同的内容创建。 (存储空间的浪费)

Wheels 
------- 
<PK>ID:Integer 
<FK>Car_ID:Integer 

Cars 
----- 
<PK>ID:Integer 

所以我强迫第三个表的创建为汽车轮关系试过另一种解决方案。所以这些ID将被存储在相应的Car_Wheel表中。

我向Wheel-class添加了一个属性,用于聚焦许多关系。

public virtual ICollection<MonitoringTask> RelatedCars { get; set; } 

愿望创建该表方案:

Wheels 
------- 
<PK>ID:Integer 

Cars 
----- 
<PK>ID:Integer 

Car_Wheel 
------- 
<PK><FK> ID_Car:Integer 
<PK><FK> ID_Wheel:Integer 

??? 所以这看起来不错,但我正在寻找一个不需要更改Wheel级别的解决方案。 ???

+0

我想'MonitoringTask'的例子应该是'Car'。你在谈论“多对多”的关系。你是问如何在'Wheel'侧设置许多一对多的关系,而不导航属性? –

回答

1

“因为我有多个汽车和foreach汽车在轮子上的新条目 将具有相同内容的创建。”

您描述的是一个m to n(多对多)问题,而不是m to 1。因此,你必须去一个交界处。

你描述的解决方案看起来很好。

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