繁体   English   中英

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

[英]DbContext Initializing ICollection navigation properties but not others

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为空。

为什么?

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

我只想了解ClassTwo的原因,所以从DbContext创建Collection属性时不会对其进行初始化。

谢谢


更新

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

找到了问题。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM