使用虚拟延迟加载时的EF ObjectDisposedException

时间:2017-11-02 15:51:42

标签: c# entity-framework linq

我正在使用Entity Framework来处理一个非常小的数据库,以跟踪纸牌游戏中的游戏状态。游戏中有玩家有牌,我的模型看起来像这样:

public class Game
{
    public int Id { get; set; }
    public DateTime DateTime { get; set; }
    public virtual List<Player> Players { get; set; }
}

public class Player
{
    public int Id { get; set; }
    public string Username { get; set; }
    public string Password { get; set; }
    public virtual List<Card> Cards { get; set; }
}

public class Card
{
    public int Id { get; set; }
    public string Value { get; set; }
    public string Suite { get; set; }

}

这不是最好的设计(我知道),但它完成了工作。无论如何,现在我想展示所有游戏(实际上是他们的玩家和他们的卡片),我认为我的延迟加载就像写作一样简单:

public List<Game> GetAllGames()
{
    using (var db = new DatabaseContext())
    {
         return db.Games.ToList();
    }
}

但是调试代码时,我注意到每个Game对象中的Players属性会抛出一个名为ObjectDisposedException的东西。它似乎与db语境的using语句有关。我在此之前搜索过并在SO上找到了问题,并且唯一的选择似乎是编写LINQ以删除虚拟关键字并改为编写LINQ(而且我不确定这应该是我想要的东西)。那么,如果在using语句之外没有使用它,延迟加载的目的是什么?

1 个答案:

答案 0 :(得分:1)

您需要急切加载

return db.Games.Include(x => x.Players).ToList(); 

应该做的伎俩