DbContext正在初始化ICollection导航属性,但不初始化其他属性

本文关键字:初始化 属性 其他 导航 ICollection DbContext | 更新日期: 2023-09-27 18:12:41

具有

public class ClassOne
{
  [Key]
  public virtual int ClassOneID { get; set; }
  [InverseProperty("ClassOne")]
  public virtual ICollection<ClassTwo> ClassTwoCollection { get; set; }
}
public class ClassTwo
{
  [Key]
  public virtual int ClassTwoID { get; set; }
  [ForeignKey("ClassOne")]
  public virtual int ClassOneID { get; set; }
  [InverseProperty("ClassTwoCollection")]
  public virtual ClassOne ClassOne { get; set; }
  [InverseProperty("ClassTwo")]
  public virtual ICollection<ClassThree> ClassThreeCollection { get; set; }
  [InverseProperty("ClassTwo")]
  public virtual ClassFour ClassFour { get; set; }
  [InverseProperty("ClassTwoPrimary")]
  public virtual ICollection<ClassFour> ClassFourCollectionAsPrimary { get; set; }
}
public class ClassThree
{
  [Key]
  public virtual int ClassThreeID { get; set; }
  [ForeignKey("ClassTwo")]
  public virtual int ClassTwoID { get; set; }
  [InverseProperty("ClassThreeCollection")]
  public virtual ClassTwo ClassTwo { get; set; }
}
public class ClassFour
{
  [Key]
  [ForeignKey("ClassTwo")]
  public virtual int ClassTwoID { get; set; }
  [ForeignKey("ClassTwoPrimary")]
  public virtual int ClassTwoPrimaryID { get; set; }
  [InverseProperty("ClassFour")]
  public virtual ClassTwo ClassTwo { get; set; }
  [InverseProperty("ClassFourCollectionAsPrimary")]
  public virtual ClassTwo ClassTwoPrimary { get; set; }
}

如果我创建一个ClassOne:myDbCntxt.ClassOneSet.Create();,ClassTwoCollection就会初始化。

如果创建ClassTwo:myDbCntxt.ClassTwoSet.Create();,则ClassThreeCollection和ClassFourCollectionAsPrimary为null。

为什么?

代理创建已启用,我可以看到生成的类名。它们是代理类。我知道我过度装修了我的房子,但这不是今天的问题。

我想了解的是为什么ClassTwo的Collection属性在从DbContext创建时没有初始化。

感谢


更新

问题实际上是另一个成员在ClassTwo中未声明为虚拟成员。我想有一条规则,您的所有公共成员都应该是虚拟的,以便在代理中初始化集合属性。

DbContext正在初始化ICollection导航属性,但不初始化其他属性

发现问题。

问题实际上是另一个成员在ClassTwo中未声明为虚拟成员。我想有一条规则,您的所有公共成员都应该是虚拟的,以便在代理中初始化集合属性。

我真的不明白为什么会有这种行为。如果您不希望Int32属性在您的代理中被覆盖,该怎么办。这不应该影响虚拟导航属性的默认行为。