【问题标题】:DbContext Initializing ICollection navigation properties but not othersDbContext 正在初始化 ICollection 导航属性,但不初始化其他属性
【发布时间】:2011-10-26 16:11:15
【问题描述】:

拥有

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 的 Collection 属性在从 DbContext 创建时没有初始化。

谢谢


更新

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

【问题讨论】:

  • 我只运行你的代码,它对我有用 - ClassTwoSet 中的两个集合都已初始化。
  • 感谢您为测试我的代码所做的努力。

标签: c# entity-framework-4.1 poco dbcontext


【解决方案1】:

找到问题了。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多