2017-10-16 5 views
1

J'ai trois modèles (tableaux) dans SQLite comme suit:opération de suppression en référence clé étrangère dans Xamarin sqlite forme

public class Program 
{ 
    [PrimaryKey, AutoIncrement] 
    public int ProgramId { get; set; } 
    public string Name { get; set; } 
} 

public class Training 
{ 
    [PrimaryKey, AutoIncrement] 
    public int TrainingId { get; set; } 

    [ForeignKey(typeof(Program))] 
    public int ProgramId { get; set; } 

} 

public class Instructor 
{ 
    [PrimaryKey, AutoIncrement] 
    public int InstructorId { get; set; } 

    [ForeignKey(typeof(Program))] 
    public int ProgramId { get; set; } 

} 

J'ai deux clés étrangères ProgramId dans la formation et la table d'instructeur référençant la clé primaire ProgramId dans Table de programme. Je veux faire une opération de suppression dans le programme de la table où le ProgramId == 1 et je veux que cette opération de suppression soit affectée dans les deux tables correspondantes Training and Instructor aussi bien. Comment puis-je y parvenir en sqlite en utilisant des formes xamarin?

Veuillez nous aviser. Je vous remercie.

Répondre

0

Vous parlez des opérations en cascade.

Le package SQLite-net standard (je suppose que vous utilisez celui-ci) n'a pas encore cette fonctionnalité, mais vous pouvez y parvenir en utilisant le sqlite-net-extensions package.

Le seul changement que vous feriez serait sur votre classe principale, où il faudrait déclarer les classes liées que vous voulez faire supprimer sur la cascade. Il serait changé pour être comme:

public class Program 
{ 
    [PrimaryKey, AutoIncrement] 
    public int ProgramId { get; set; } 
    public string Name { get; set; } 

    [OneToMany(CascadeOperations = CascadeOperation.CascadeDelete)] 
    public Training[] Trainings {get; set; } 

    [OneToMany(CascadeOperations = CascadeOperation.CascadeDelete)] 
    public Instructor[] Instructors {get; set; } 
} 

Et il peut faire l'affaire. J'espère que cela vous aidera.

+0

Pourquoi 'Training []' et 'Instructor []'? et si j'utilise 'var prog = con.GetWithChildren (ProgramId); con.Delete (prog, true); ', supprimera-t-il également les enregistrements des deux autres tables? – jones

+0

1 - Cette notation est requise pour définir les opérations en cascade sur le package SQLite-net-extensions. S'il vous plaît lire la documentation mentionnée sur le lien que j'ai posté dans la réponse à plus d'informations sur ses notations et fonctionnalités; 2 - Si vous n'utilisez pas la notation et faites le changement que j'ai suggéré, rien ne changera pour vous. La partie 'Children' sur le nom de la méthode est déduite de ces attributs sur les propriétés' Trainings' et 'Instructors'. –