SQLite Net Extensions を使用して、ゲーム用のメモ取りアプリを作成しようとしています。3 層のモデルを使用しています。Game [1 has many *] Character [1 has many *] Note [1 applies to *] Character
Visual Studio Community 2015 で Xamarin を使用しており、NuGet パッケージ マネージャーを使用して SQLiteNetExtensions をインストールしています。
ゲームとキャラクターの間の関係の最初のレベルをまだ超えていません。データベースへの挿入 (最初の挿入とその後の更新を介して、または InsertWithChildren を再帰的に使用するかどうか) は、ゲーム オブジェクトのキャラクターを更新していません。List<CharacterModel>
内部の GameModelの null オブジェクトになるだけです。ただし、ゲームとキャラクターの両方がデータベースに登録されています。
抽象基本モデル
public abstract class IdentifiableModel
{
[PrimaryKey, AutoIncrement]
public int Id { get; set; }
}
ゲームモデル
[Table("Game")]
public class GameModel : IdentifiableModel
{
[MaxLength(64)]
public string Name { get; set; }
[OneToMany]
public List<CharacterModel> Characters { get; set; }
}
キャラクターモデル
[Table("Characters")]
public class CharacterModel : IdentifiableModel
{
[ForeignKey(typeof (GameModel))]
public int GameId { get; set; }
[ManyToOne]
public GameModel Game { get; set; }
public string FullName { get; set; }
public string ShortName { get; set; }
}
データベースへの挿入をテストするには、メイン アクティビティでこれを行います。
var game =
new GameModel
{
Name = "Game"
};
database.Insert(game);
var characters = new List<CharacterModel>
{
new CharacterModel
{
FullName = "Dude"
},
new CharacterModel
{
FullName = "Dudette"
}
};
database.InsertAll(characters);
game.Characters = characters;
database.UpdateWithChildren(game);
var testGame = database.GetAll<GameModel>().FirstOrDefault();
var testCharacter = database.GetAll<CharacterModel>().FirstOrDefault();
Console.WriteLine(testGame.Id + " " + testGame.Name);
Console.WriteLine(testCharacter.Id + " " + testCharacter.FullName + " " + testCharacter.GameId);
//testGame.Characters; // THIS IS NULL.
//testCharacter.Game; // THIS IS NULL.
私はこれをどこからソートし始めたらよいのか途方に暮れています。
編集:継承されていない主キーを使用しても、まったく違いはありませんでした。testGame.Characters
またはにまだデータがありませんtestCharacter.Game