我試圖使用SQLite網絡擴展做了筆記應用程序爲遊戲,它採用3層模型,Game [1 has many *] Character [1 has many *] Note [1 applies to *] Character
SQLite的網絡擴展一對多關係不插入/省電/更新兒童
我使用Xamarin Visual Studio Community 2015,並使用NuGet包管理器安裝SQLiteNetExtensions。
我還沒有過去遊戲和角色之間的第一級關係,並且插入到數據庫中(無論是通過初始插入然後更新,還是遞歸地使用InsertWithChildren)都不會更新Game對象中的角色。它只會導致GameModel中List<CharacterModel>
的空對象。然而遊戲和角色都在數據庫上。
摘要示範基地
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
作爲Abstract基礎模型的一部分,所有主鍵都是擴展類中的屬性'''Id'''。 –
我不確定繼承PK是否有效。我也懷疑它有價值。 – NoChance
如果沒有它,Xamarin教程會使用繼承的PK: http://developer.xamarin.com/guides/cross-platform/application_fundamentals/data/part_3_using_sqlite_orm/ –