外键对象的实体框架null引用

时间:2012-03-18 20:18:36

标签: entity-framework entity-framework-4 ef-code-first

我正在使用Entity Framework Code First v 4.3.0

我有一个具有一对多关系的两个实体

e.g。

  public class User
  {
    [Key]
    public virtual string Username { get; set; }

    public virtual ICollection<Vacation> Vacations { get; set; }
  }

  public class Vacation
  {
    public int Id { get; set; }

    public virtual User User { get; set; }

    public virtual string UserUsername { get; set; }

  }

因此,方案是使用用户名“User1”创建用户。随后创建一个Vacation,UserUsername字段设置为“User1”。所以我们有了他们的关系。

如果我在保存假期后查询数据库,则新假期用户为空。

如果我处理了DbContext并重新启动它。假期用户的重新查询已设置。

为什么会出现这种情况?

1 个答案:

答案 0 :(得分:2)

好的,让我试着解释一下问题所在。

Microsoft说如果启用了延迟加载并且已经加载了相关实体,则不会再次加载它。

我认为这种设计导致了我的问题。

我创建了我的新假期,将UserUsername设置为“User1”并点击保存。然后我查询DbContext的新假期。由于此实体已在我的DbContext的上下文中加载,因此不会重新加载,因此User为空。

如果我创建了一个新的DbContext并运行了相同的查询,则会填充用户。

我希望这是有道理的。