C# 实体框架多个父对象
我有两个模型 BdoSubSystem: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
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,它不会自动加载导航属性不再