Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 实体框架多个父对象_C#_Database_Entity Framework_Azure - Fatal编程技术网

C# 实体框架多个父对象

C# 实体框架多个父对象,c#,database,entity-framework,azure,C#,Database,Entity Framework,Azure,我有两个模型 BdoSubSystem: public class BdoSubSystem { [Key] [DatabaseGenerated(DatabaseGeneratedOption.Identity)] public int Id { get; set; } public string Name { get; set; } } 和BDO系统: public class BdoSystem { [Key] [DatabaseGene

我有两个模型

BdoSubSystem:

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

    public string Name { get; set; }
}
和BDO系统:

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

    public string Name { get; set; }

    public virtual ICollection<BdoSubSystem> SubSystems { get; set; }
}
公共类BDO系统
{
[关键]
[数据库生成(DatabaseGeneratedOption.Identity)]
公共int Id{get;set;}
公共字符串名称{get;set;}
公共虚拟ICollection子系统{get;set;}
}
我使用迁移在Azure上自动创建表。问题在于子系统并不是针对每个系统的,一个子系统可能有多个父系统,并且可能出现在多个系统中。但这样,每个子系统都属于每个系统


一个子系统怎么可能出现在多个系统中?

如果我能很好地理解的话,子系统只是一个以系统为父系统的系统之王

如果我的句子是真的,你可以使用自我参照

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; }
}
公共类BdoSubSystem
{
[关键]
[数据库生成(DatabaseGeneratedOption.Identity)]
公共int Id{get;set;}
公共字符串名称{get;set;}
公共虚拟ICollection系统{get;set;}
}
公共类BDO系统
{
[关键]
[数据库生成(DatabaseGeneratedOption.Identity)]
公共int Id{get;set;}
公共字符串名称{get;set;}
公共虚拟ICollection子系统{get;set;}
}

很好,谢谢大家。解决方案是在子系统中引用并使用[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; }
}
公共类BdoSubSystem
{
[关键]
[数据库生成(DatabaseGeneratedOption.Identity)]
公共int Id{get;set;}
公共字符串名称{get;set;}
[JsonIgnore]
公共虚拟ICollection子系统{get;set;}
}

看起来您正在寻找一种多对多关系,这种关系通常在一个带有额外表(例如Person、Address和PersonalAddress)的数据库中解决,这样每个X都可以链接到多个Y,而每个Y也可以链接到多个X。上一次我查看EF时,它没有很好地处理这一问题,即使是先使用DB(导航属性未按预期工作)。希望有人能告诉你ewest EF是如何处理这个问题的。谢谢你的回答。我正在寻找一些关于多对多关系的教程。我会检查它是否对我有帮助!我没有得到你的第一个答案。因为在你的第一个例子中,系统不再有子系统集合。无论如何,我正在寻找多对多关系我会检查它是否有效。谢谢!太好了,我检查了一些多对多教程,并完全按照您的第二个示例所做的操作。迁移在azure上创建了另一个名为“BdoSystemBdoSubSystem”的表。但是现在,JSON的序列化不再起作用了,我想这是因为每个模型中都有循环引用。有没有安全的方法来序列化这个对象?第一个解决方案是一个树而不是一个列表。正如我看到的,你找到了解决问题的方法。你也可以禁用Lazyloading,它不会自动加载导航属性不再