【发布时间】:2018-10-29 07:39:33
【问题描述】:
例如,假设我们有以下情况:我有一个名为 StandardEngineeredModel 的类,它具有 ModelNumber、VoltageInput、VoltageOutput 等属性。
我还有一个名为 Fuse 的类,它具有诸如 Designator、Rating 和 Type 等属性。在我的数据库模型中,这两个类之间会有多对多的关系,一个 StandardEngineeredModel 可以包含 MANY 个熔断器,一个熔断器可以包含在 MANY 个不同的 StandardEngineeredModels 中。请参阅下面的代码。
public class StandardEngineeredModel
{
StandardEngineeredModel()
{
Fuses = new List<Fuse>();
}
[Key]
public string ModelNumber { get; set; }
public int VoltageInput { get; set; }
public string VoltageOutput {get;set;}
public ICollection<Fuse> Fuses { get; set; }
}
public class Fuse
{
[Key,Column(Order = 0)]
public string Designator { get; set; }
[Key, Column(Order = 1)]
public string Rating { get; set; }
[Key, Column(Order = 2)]
public string Type { get; set; }
public ICollection<StandardEngineeredModel> StandardEngineeredModels { get; set; }
}
所以我的问题是您在构造函数中初始化集合的部分:对于我的 StandardEngineeredModel,使用列表初始化 Fuse 是有意义的。但是在我的 Fuse 类中,初始化 ICollection 对我来说并没有什么意义,因为通常我会将保险丝分配给 StandardEngineeredModel 而不是将 StandardEngineeredModel 分配给保险丝。
这样做有什么我没有看到的问题吗?这会给我带来哪些类型的问题?我在一些应用程序中使用了 EF,但还需要多对多关系,因此我正在寻找一些关于此的一般性建议。
提前致谢!
【问题讨论】:
-
“但是在我的 Fuse 类中,初始化 ICollection 对我来说并没有什么意义,因为通常我会将熔断器分配给 StandardEngineeredModel 而不是将 StandardEngineeredModel 分配给熔断器。”我想你回答了你自己的问题。您可能不想对了解所有使用它们的设备的保险丝进行建模。但反过来说也有道理——设备知道他们使用什么保险丝是有意义的。
-
是的,我问的唯一原因是因为在大多数多对多关系的教程中,他们说要初始化关系的双方。我只是想确保我的想法是有道理的哈哈。谢谢! @chadnt
-
假设这是 EF6(因为您没有提到 EF-core 需要的显式连接类):集合
StandardEngineeredModelsisn't even necessary。
标签: c# entity-framework model many-to-many relationship