2017-10-16 39 views
1

我在sqlite的三种模式(表)如下:在sqlite的xamarin外键引用删除操作形成

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; } 

} 

我有两个外键ProgramId在训练和导师表引用的主键ProgramId程序表。我想在表程序中进行删除操作,其中ProgramId == 1,并且我希望这个删除操作也会在相应的两个表Training and Instructor中受到影响。如何使用xamarin表单在sqlite中实现这一点?

请指教。谢谢。

回答

0

你在谈论级联操作。

标准SQLite-net包(我假设你使用这个包)还没有这个功能,但你可以使用sqlite-net-extensions package来实现这个功能。

你要做的唯一改变就是在你的主类上,它需要声明你想在级联上进行删除的关联类。它会被改为像:

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; } 
} 

它可能会伎俩。 我希望它能帮助你。

+0

为什么这个'Training []'和'Instructor []'? 如果我使用'var prog = con.GetWithChildren (ProgramId); con.Delete(prog,true);',它是否会删除其他两个表中的记录? – jones

+0

1 - 这是在SQLite-net-extensions包中定义级联操作所需的符号。请阅读我在已发布的链接中提到的文档,以获取有关其符号和功能的更多信息; 2 - 如果您不使用记号并进行我建议的更改,则不会有任何变化。方法名称中的“Children”部分由'Trainings'和'Instructors'属性的属性传递。 –