public class Person {
[PrimaryKey, AutoIncrement]
public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
[ManyToMany(typeof(PersonColor), CascadeOperations = CascadeOperation.All)]
public List<Color> FavoriteColors { get; set; }
}
public class Color {
[PrimaryKey, AutoIncrement]
public int Id { get; set; }
public string Name { get; set; }
[ManyToMany(typeof(PersonColor))]
public List<Person> People { get; set; }
}
public class PersonColor {
[ForeignKey(typeof(Person))]
public int PersonId { get; set; }
[ForeignKey(typeof(Color))]
public int ColorId { get; set; }
}
...Beaucoup de nombreuses relations avec les tables de consultation
var person = new Person() {
FirstName = "Adrian",
LastName = "Simbulan",
FavoriteColors = new List<Color>() {
new Color() {Name = "Red"},
new Color() {Name = "Green"}
}
};
await _db.InsertWithChildrenAsync(person);
Ok donc je suis en train d'établir une relation plusieurs à plusieurs entre personne et couleur. La table de couleurs sera pré-remplie avec des données statiques.
Maintenant, le problème est que chaque fois que j'exécute la commande "InsertWithChildrenAsync", il insère toujours de nouvelles données dans la table de recherche de couleurs. Est-il possible d'insérer un enregistrement de personne avec des couleurs sélectionnées sans affecter la table de couleurs?
Modification de CascadeOperations pour lire simplement travaillé. L'exécution de l'opération en deux étapes serait-elle plus courante lors de l'insertion de nouveaux enregistrements dans une table ayant une relation avec une table de recherche? – ad0ran
L'opération en deux étapes est ce que la bibliothèque fait en interne. La deuxième solution ne nécessite pas de modifier la définition du modèle si vous avez besoin d'opérations d'écriture récursives ailleurs. Si ce n'est pas nécessaire, respectez la première solution pour éviter d'écrire des objets 'Color' par erreur. – redent84