簡體   English   中英

數據庫列的屬性(C#、EF Core)

[英]Properties to Database Columns (C#, EF Core)

我在 WPF 中編寫了一個井字游戲,效果很好。 現在,我的任務是創建一個數據庫來保存每輪游戲的信息。

=> 所以數據庫列應該是這樣的

GameScoreId || 玩家 X || 玩家 O || 游戲模式 || 優勝者|| 失敗者|| 游戲狀態

我的 GameScore 類如下所示:

public class GameScores
{
    private MainWindowViewModel? MainWindowViewModel = new MainWindowViewModel();
    private TicTacToeLogic? Game => MainWindowViewModel!.CurrentGame;
    public int? GameScoreId { get; set; }
    public string PlayerX => Game!.PlayerX.Name;
    public string PlayerO => Game!.PlayerO.Name;
    public Enum Mode
    {
        get
        {
            var mode = Game!.PlayerO switch
            {
                HumanPlayer => GameMode.HumanVsHuman,
                EasyCom => GameMode.HumanVsEasyBot,
                HardCom => GameMode.HumanVsHardBot,
                _ => throw new NotImplementedException(),
            };
            return mode;
        }
    }
    public string? Winner
    {
        get
        {
            if (Game!.GameOver && Game.GetFreeFields().Count is not 0)
                return Game.CurrentPlayer!.Name;

            return null;
        }
    }
    public string? Loser
    {
        get
        {
            if (Game!.GameOver && Game.GetFreeFields().Count is not 0)
                return Game.CurrentPlayer!.Enemy!.Name;

            return null;
        }
    }
    public Enum Status
    {
        get
        {
            if (Game!.GameOver && Game.GetFreeFields().Count is not 0)
            {
                return GameStatus.Win;
            }
            return GameStatus.Draw;
        }
    }
}

我的上下文類看起來像這樣:

public class GameScoresContext : DbContext
{
    // table with gamescores
    public DbSet<GameScores>? GameScores { get; set; }

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        optionsBuilder.UseSqlServer(@"Data Source=localhost;Initial Catalog=GameScoresDB;Integrated Security=True");
    }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<GameScores>().HasKey(e => e.GameScoreId);
    }
}

}

在 NuGet 數據包管理器控制台上添加遷移和更新數據庫后,它會在我的服務器上創建一個表,如下所示: 在此處輸入圖像描述

為什么不將屬性(GameScores 類)作為列添加到數據庫中? 或者如何將屬性作為列添加到我的數據庫中?

干杯!

屬性也需要映射

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<GameScores>().HasKey(e => e.GameScoreId);
    modelBuilder.Entity<GameScores>().Property(e => e.PlayerX);
    ...
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM