4

私はモバイルアプリ開発に非常に慣れていないので、独学しようとしています。私が作成しようとしているこの特定のアプリには、Xamarin と sqlite-net (拡張機能) を使用しています。

OneToMany 関係を持つ 2 つのクラスがあります

class Game
{
    [PrimaryKey, AutoIncrement]
    public int Id { get; set; }
    public string Name { get; set; }

    [OneToMany(CascadeOperations = CascadeOperation.All)]
    public List<Player> Players { get; set; }

    public Game()
    {
        Players = new List<Player>();
    }
}

class Player
{
    [PrimaryKey, AutoIncrement]
    public int Id { get; set; }
    [MaxLength(8)]
    public string Name { get; set; }

    [ForeignKey(typeof(Game))]
    public int GameId { get; set; }

    [ManyToOne]
    public Game Game { get; set; }

}

今私の活動では、私はこのようなものを持っています

        SQLiteConnection db = new SQLiteConnection(new SQLite.Net.Platform.XamarinAndroid.SQLitePlatformAndroid(), path);

        db.CreateTable<Player>(); 
        db.CreateTable<Game>();

        Game game = new Game();
        game.Name = "Stupid game";

        Game game2 = new Game();
        game2.Name = "Fun game";

        Game game3 = new Game(); 
        game3.Name =  "Amazing game";

        db.Insert(game);
        db.Insert(game2);
        db.Insert(game3);

        Player player = new Player();
        player.Name = name; //Getting this from a input field
        db.Insert(player);

        Random random = new Random();                     
        player.GameId = random.Next(1, 3);
        Game game = db.Get<Game>(player.GameId);
        player.Game = game;

        db.UpdateWithChildren(player);

        game.Players.Add(player);
        db.UpdateWithChildren(game);

これはすべて機能しているようで、エラーは発生しません。これをデバッグすると、プレーヤーに実際にゲームが追加されていることがわかります。ただし、次のステートメントを使用してすべてのプレーヤーを取得しようとすると、

 List<Player> players = db.Table<Player>().ToList();

突然ゲームがなくなり、そのプロパティを読み込もうとするとプログラムがクラッシュします。

UpdateWithChildren と InsertWithChildren でいくつかの異なることを試しましたが、役に立ちませんでした。私が間違っていることはありますか、それともインストールしていないものですか? 本当に助かります。

4

1 に答える 1