SQLite-Net Extensions:如何摆脱关系记录?

时间:2015-04-17 12:05:22

标签: sqlite-net sqlite-net-extensions

假设我在官方样本中有多对多的关系:

public class Student
{
    [PrimaryKey, AutoIncrement]
    public int Id { get; set; }

    public string Name { get; set; }

    [ManyToMany(typeof(StudentSubject))]
    public List<Student> Students { get; set; } 
}

public class Subject
{
    [PrimaryKey, AutoIncrement]
    public int Id { get; set; }

    public string Description { get; set; }

    [ManyToMany(typeof(StudentSubject))]
    public List<Subject> Subjects { get; set; } 
}

public class StudentSubject
{
    [ForeignKey(typeof(Student))]
    public int StudentId { get; set; }

    [ForeignKey(typeof(Subject))]
    public int SubjectId { get; set; }
}

如果我现在正在删除学生,则中间对象所代表的关系记录也不会被删除。 (如果我启用了级联删除,则主题会被删除 - 不应该发生什么。)

目前我通过使用自定义查询删除记录来手动清理,但使用sqlite-net是否有更好的方法?

1 个答案:

答案 0 :(得分:2)

您可以将nullSubjects属性设置为空列表,并在学生对象上调用UpdateWithChildren

student.Subjects = null;
conn.UpdateWithChildren(student);

它将更新学生对象及其关系,删除该学生的所有记录,相当于:

conn.Execute("DELETE FROM StudentSubject WHERE StudentId = ?", studentId);

缺点是你还有一个更新&#39;如果让SQLite-Net Extensions处理关系,则在数据库中执行语句。