c# - 将 List<object> 添加到 EF

标签 c# entity-framework list

我正在玩 EF,试图找到方向。现在我正在为网站编写二十一点游戏。问题是,每当我从数据库中提取 GameState 时,playerHanddealerHandtheDeckdealerHidden 属性为空。

public class GameState
{
    [Key]
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
    public int gameSession { get; set; }
    public int playerScore { get; set; }
    public int dealerScore { get; set; }
    public Deck theDeck { get; set; }
    public List<Cards> playerHand { get; set; }
    public List<Cards> dealerHand { get; set; }
    public Cards dealerHidden { get; set; }
    public bool gameOver { get; set; }
}

public class Cards
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int cardId { get; set; }
    public string cardName { get; set; }
    public int cardValue { get; set; }
}

public class GameStateContext : DbContext
{
    public GameStateContext() : base("MyContext")
    {
    }
    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<GameState>().HasRequired(e => e.theDeck);
        modelBuilder.Entity<GameState>().HasRequired(e => e.dealerHand).WithMany().WillCascadeOnDelete(false);
        modelBuilder.Entity<GameState>().HasRequired(e => e.playerHand).WithMany().WillCascadeOnDelete(false);
        modelBuilder.Entity<GameState>().HasOptional(e => e.dealerHidden);
        modelBuilder.Entity<Deck>().HasRequired(e => e.cards).WithMany().WillCascadeOnDelete(false);
        base.OnModelCreating(modelBuilder);
    }

    public DbSet<GameState> GameStates { get; set; }
    public DbSet<Deck> Decks { get; set; }
    public DbSet<Card> Cards { get; set; }
}

卡片和套牌 table 已填充。我哪里错了?

最佳答案

我认为您要么需要通过将它们设为虚拟属性来使您的导航属性(即 playerHand、dealerHand、theDeck 和 dealerHidden 可延迟加载),要么您需要在查询 GameState 时预先加载它们。

myDBContext.GameStates.Include("playerHand").Include("dealerHand").Include("theDeck").Include("dealerHidden").where(...);

下面是关于 Entity Framework 如何处理相关对象的一个​​体面的解释:

http://msdn.microsoft.com/en-us/data/jj574232.aspx

关于c# - 将 List<object> 添加到 EF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13893315/

相关文章:

entity-framework - 如何确保在 Entity Framework 中使用存储库模式时创建代理?

c# - Entity Framework 中主键不递增

Python:变长元组

python - 每个索引的排序列表中的最大行序列

c# - 将 XSLT 中的模板附加到另一个 XSLT

c# - 在 C# 中反转字符串的最佳方法

c# - 在 MVC 中返回列表会导致错误

c# - 在 C# 中初始化嵌套字典

c# - 如何编写 switch 语句来测试 DialogResult 并提供 fall through 逻辑

c# - 从 C# 代码停止 Windows 服务不起作用