2011-10-26 45 views
0

的DbContext初始化ICollection的導航屬性而不是其他

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創建時未初始化。

感謝


UPDATE

的問題實際上有另一個成員不宣佈爲ClassTwo虛擬。我想有一個規則,所有的公共成員都應該是虛擬的,以便在代理中初始化集合屬性。

+1

我只運行你的代碼,它適用於我 - 初始化ClassTwoSet中的兩個集合。 –

+0

感謝您測試我的代碼。 –

回答

0

發現問題。

該問題實際上是另一個成員NOT在ClassTwo中聲明爲虛擬。 我想有一個規則,所有的公共成員應該是虛擬的集合屬性在代理初始化。

我真的不明白爲什麼會出現這種行爲。如果您不希望Int32屬性在您的代理中被覆蓋,該怎麼辦?這不應該影響虛擬導航屬性的默認行爲。