我正在使用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语句之外没有使用它,延迟加载的目的是什么?
答案 0 :(得分:1)
您需要急切加载
return db.Games.Include(x => x.Players).ToList();
应该做的伎俩