0

持っている

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から作成したときにコレクションプロパティが初期化されない理由だけです。

ありがとう


更新

問題は、実際には、ClassTwoで仮想として宣言されていない別のメンバーが存在することでした。コレクションプロパティをプロキシで初期化するには、すべてのパブリックメンバーが仮想である必要があるというルールがあると思います。

4

1 に答える 1

0

問題が見つかりました。

問題は、実際には、ClassTwoで仮想として宣言されていない別のメンバーが存在することでした。コレクションプロパティをプロキシで初期化するには、すべてのパブリックメンバーが仮想である必要があるというルールがあると思います。

なぜこの振る舞いをするのか本当にわかりません。プロキシでInt32プロパティをまったくオーバーライドしたくない場合はどうなりますか。これは、仮想ナビゲーションプロパティのデフォルトの動作には影響しません。

于 2011-10-26T20:48:34.087 に答える