具有
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从DbContext创建时不会初始化Collection属性。
由于
更新:
问题实际上是在ClassTwo中将另一个成员声明为虚拟。我想有一条规则,即所有公共成员都应该是虚拟的,以便在代理中初始化集合属性。
答案 0 :(得分:0)
发现问题。
问题实际上是在ClassTwo中将另一个成员声明为虚拟。 我想有一条规则,即所有公共成员都应该是虚拟的,以便在代理中初始化集合属性。
我真的不明白为什么会这样做。如果您不希望在代理中完全覆盖Int32属性,该怎么办?这不应该影响虚拟导航属性的默认行为。