J'ai décidé d'implémenter une base de données dans Xamarin.Android qui stocke les données sur l'appareil et les obtient très occasionnellement du serveur. Quoi qu'il en soit, je voulais créer une base de données à partir de zéro si elle ne stocke aucune table. Mon problème est que j'ai des modèles qui sont utilisés pour créer de nouvelles tables, mais ces modèles sont connectés par relation plusieurs-à-plusieurs avec eux-mêmes et cela bloque la transaction lors de la première tentative de création de table.Créer une table many-to-many dans les crashs du constructeur car la deuxième table n'a pas encore été créée
Je sais que c'est lié à des contraintes mais je n'ai aucune idée de comment refactoriser l'application pour éviter cela. Je n'ai pas pu trouver de réponse à ce sujet directement.
Des pensées?
class Database
{
private SQLiteConnection _connection;
public Database()
{
_connection = new SQLite().GetConnection();
LogHelper.CustomLog("SQL Created");
_connection.BeginTransaction();
_connection.CreateTable<Dish>(); //there is the issue
_connection.CreateTable<Ingredient>();
_connection.Commit();
LogHelper.CustomLog("SQL DBs created");
AddIngredient(new Ingredient() { Id = 1, Name = "apple", Vegetarian = false, GlutenFree = false });
AddDish(new Dish() { Id = 1, Calories = "23", Desc = "test", Name = "oranges", Time = 30, Ingredients = GetIngredientList() });
}
}
public class Dish
{
[PrimaryKey, AutoIncrement]
public int Id { get; set; }
public string Name { get; set; }
public string Desc { get; set; }
public int Time { get; set; }
//public string Rating { get; set; }
public string Calories { get; set; }
[ForeignKey(typeof(Ingredient))]
public int IngredientId { get; set; }
[ManyToMany(typeof(Dish))]
public List<Ingredient> Ingredients { get; set; }
public override string ToString()
{
return string.Format("[Dish: Id={0}, Name={1}, Desc={2}, Time={3},
Ingredients={4}, Calories={6}]",
Id, Name, Desc, Time, Ingredients, Calories);
}
}
public class Ingredient
{
[PrimaryKey, AutoIncrement]
public int Id { get; set; }
public string Name { get; set; }
public bool Vegetarian { get; set; }
public bool GlutenFree { get; set; }
[ForeignKey(typeof(Dish))]
public int DishId { get; set; }
[ManyToMany(typeof(Ingredient))]
public List<Dish> Dishes { get; set; }
}
Après vos modifications, je ne peux toujours pas créer des tables. https://ibb.co/gdboqQ – Perisher
@Perisher cette erreur semble être liée à ce problème: https://github.com/praeclarum/sqlite-net/issues/553 – apineda