Я пытаюсь использовать SQLite Net Extensions делать заметки приложения для игр, он использует 3 слой модели, Game [1 has many *] Character [1 has many *] Note [1 applies to *] Character
SQLite Net Extensions OneToMany отношение не вставляя/сохранение/обновление Детей
Я использую Xamarin в Visual Studio Community 2015 и установленных SQLiteNetExtensions с помощью диспетчера пакетов NuGet.
Я еще не прошел первый уровень отношений между игрой и персонажем, а вставка в базу данных (будь то через начальную вставку, а затем обновление или с использованием рекурсивного метода InsertWithChildren) не обновляет символы в объекте Game. Это просто приводит к нулевому объекту для List<CharacterModel>
внутри GameModel. Однако как игра, так и персонажи делают это в базе данных.
Аннотация базовая модель
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; }
}
Character Модель
[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.
Я нахожусь в недоумении, где начать сортировку этого и будет признателен за помощь в его запуске и запуске.
Edit: Использование Ненаследуемые первичного ключа не сделал никакой разницы. Все еще нет данных в testGame.Characters
или testCharacter.Game
В рамках базовой модели абстрактного выражения все первичные ключи являются свойством '' 'Id''' в расширенном классе. –
Я не уверен, работает ли наследование ПК или нет. Я также сомневаюсь, что это имеет ценность. – NoChance
Я посмотрю, будет ли это работать без него, учебник Xamarin использует унаследованный ПК: 10 http://developer.xamarin.com/guides/cross-platform/application_fundamentals/data/part_3_using_sqlite_orm/ –