实体框架多个父母

时间:2017-11-28 12:41:36

标签: c# database entity-framework azure

我有两个模特。

BdoSubSystem:

public class BdoSubSystem
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int Id { get; set; }

    public string Name { get; set; }
}

和BdoSystem:

public class BdoSystem
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int Id { get; set; }

    public string Name { get; set; }

    public virtual ICollection<BdoSubSystem> SubSystems { get; set; }
}

我使用迁移在Azure上自动创建表。问题是子系统不是特定于每个系统,子系统可能有多个父系统,并且可以出现在多个系统中。但通过这种方式,每个子系统都属于每个系统。

子系统如何在多个系统中出现?

2 个答案:

答案 0 :(得分:1)

好,谢谢大家。解决方案是在子系统中引用并使用[JsonIgnore]

public class BdoSubSystem
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int Id { get; set; }

    public string Name { get; set; }

    [JsonIgnore]
    public virtual ICollection<BdoSystem> SubSystems { get; set; }
}

答案 1 :(得分:0)

如果我很好理解,SubSystem只是System的王者,系统作为父级?

如果我的判决为真,您可以使用自我引用

public class BdoSystem
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int Id { get; set; }

    public string Name { get; set; }

    public int? ParentSystemId { get; set; }
    public virtual BdoSystem ParentSystem { get; set; }

}

但是,如果您想要两个单独的对象,则应在两个类中添加导航属性

public class BdoSubSystem
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int Id { get; set; }

    public string Name { get; set; }

    public virtual ICollection<BdoSystem> Systems { get; set; }
}

public class BdoSystem
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int Id { get; set; }

    public string Name { get; set; }

    public virtual ICollection<BdoSubSystem> SubSystems { get; set; }
}