【发布时间】:2016-11-25 20:08:26
【问题描述】:
我对移动应用程序开发非常陌生,所以我正在尝试自学。 我正在为我正在尝试制作的这个特定应用程序使用 Xamarin 和 sqlite-net(扩展)。
我有 2 个具有 OneToMany 关系的类
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 尝试了一些不同的方法,但无济于事。是我做错了什么还是我没有安装什么? 非常感谢您的帮助。
【问题讨论】:
-
你试过
WithChildren的读取方法吗? -
我相信
UpdateWithChildren中可能需要一个递归的第二个参数。如果不存在,您将不得不在您的read方法中通过conn.GetWithChildren<Player>(identifier, recursive: true);执行此操作 -
Ah GetWithChildren 确实是正确的。谢谢!!
标签: c# android xamarin sqlite-net sqlite-net-extensions