c# - Entity Framework 多对多关系初始化 ICollection

标签 c# entity-framework model many-to-many relationship

<分区>

举个例子,假设我们有以下情况:我有一个名为 StandardEngineeredModel 的类,它具有 ModelNumber、VoltageInput、VoltageOutput 等属性。

我还有一个名为 Fuse 的类,它具有 Designator、Rating 和 Type 等属性。在我的数据库模型中,这两个类彼此之间存在多对多关系,一个 StandardEngineeredModel 可以包含 MANY fuse ,一个 fuse 可以包含在 MANY 不同的 StandardEngineeredModel 中。请参阅下面的代码。

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,使用列表初始化 Fuses 是有意义的。但是在我的 Fuse 类中,初始化 ICollection 对我来说并没有真正意义,因为通常我会将 fuse 分配给 StandardEngineeredModel,而不是将 StandardEngineeredModel 分配给 fuse 。

这样做有什么我没有发现的问题吗?这会给我带来什么类型的问题?我在我的一些应用程序中使用过 EF,但还不需要多对多关系,因此我正在寻找一些关于这方面的一般性建议。

提前致谢!

最佳答案

从技术上讲,您不必在构造函数中初始化集合,但您需要知道它们将为 null(特别是因为您没有使用启用延迟加载的 virtual 关键字)并且您需要在整个应用程序中检查它 - 否则,您可能会在意想不到的地方出现空异常。

关于c# - Entity Framework 多对多关系初始化 ICollection,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50418503/

相关文章:

C#:获取带有所有父标签的 XML 节点内容

c# - 解释类型转换和转换 - 用简单的话来说有什么区别

c# - 创建分层匿名类型

c# - Visual Studio 2015 中缺少 sqlite 的 ADO.NET 数据源

c# - 应该在 DTO 模型中还是在目标实体模型中执行计算?

html - 什么是DOM? (总结和重要性)

c# - 来自幕后的绑定(bind)错误

c# - 防止 EntityFramework 返回 json 字符串的转义引号

r - 将 texreg 或 stargazer R 中的模型显示格式设置为科学

PHP:5层模型